Python输入验证

问题描述 投票:1回答:1

我想在我的项目中实现Python 3.6类型注释的验证。

我有一个方法,使用__annotations__ dict来检查类的所有属性是否具有正确的值。它适用于基本类型,如intstrbool,但不适用于更复杂的元素,如typing.Uniontyping.Optional(也是一个联盟)。 失败是由引发isinstance()Union对象内的TypeError方法引起的。我甚至找不到确保注释是联盟的方法,因此我无法验证值是否符合类型。

typing模块没有任何解决方案。有没有办法验证指定的变量是否符合typing.Union

python python-3.x python-3.6 type-hinting
1个回答
0
投票

是。 isinstanceissubclass前段时间是killed,例如Union

正如in a comment on the issue by GvR所说,这个想法是实现你自己的issubclass/isinstance版本,它使用附加到类型的一些额外元数据:

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

__args____origin__从Python 3.6.3开始提供。他们可能不会在早期版本中,因为typing仍然是临时的。

在内省类型的内部接口充实并从临时状态键入毕业生之前,您应该预期由于API的更改而导致破坏。

© www.soinside.com 2019 - 2024. All rights reserved.