【发布时间】:2018-02-22 04:51:56
【问题描述】:
举个例子:
import typing
def foo(bar: int = None):
pass
typing.get_type_hints(foo)
bar 的类型提示是 typing.Union[int, None]。我如何从中获得int? __args__ 和 __parameters__ 属性似乎都不适用于 Python 3.5.2。
更具体地说,我正在尝试编写一个通用装饰器来检查函数的签名并对参数执行特定的操作。为此,它需要从 Optional[T] 等注释中获取类,然后使用 T:
annot = typing.Optional[T]
cls = # MAGIC?!
assert cls is T
【问题讨论】:
-
看来您正在寻找
annot.__args__[0](至少在3.6.1中)。你使用的是什么 Python 版本?typing仍然是 provisional,因此可能仍会进行更改。 -
现在需要在 3.5 上工作。
-
你在用
3.5.2我猜?在3.5.1中,我认为__args__被命名为__parameters__,所以请注意这一点(typing模块的内部API 非常不稳定。) -
对了,我也回答过类似的问题:stackoverflow.com/questions/38703556/…。
-
对,我只是用不同的版本来探索它,确实存在一些差异......
标签: python python-3.x annotations type-hinting