Python3.6如何添加类型注释的验证?

2021-07-28 10:41:33 浏览数 (1837)

今天小编为各位带来的是一位开发者询问Python3.6如何添加类型注释验证,希望能对各位有所帮助。

我有一个使用​__annotations__​字典的方法来检查类的所有属性是否有正确的值。它对于基本类型(如​int​、​str​或​bool​)非常适用,但对于更复杂的元素(如​typing​)则不适用。工会或打字。可选(也是一个联盟)。

失败是由Union对象中的isinstance()方法引起的,该方法抛出TypeError。我甚至找不到一种方法来确保注释是一个​Union​,因此我无法验证一个值是否符合某个类型。

解决方法:

这个想法,正如GvR对这个问题的评论中提到的,是实现你自己的​issubclass/isinstance​版本,使用一些附加到类型的额外元数据:

>>> Union[int, str].__args__
(int, str)
>>> Union[int, str].__origin__
typing.Union

__args__​和​__origin__​从Python 3.6.3开始可用。在较早的版本中可能不会,因为打字仍然是临时的。

在内省类型的内部接口被充实和输入从临时状态结束之前,您应该预料到由于API的更改而导致的破坏。