Python 3.8更新
从Python3.8开始,有
typing.get_args:
print( get_args( List[int] ) ) # (<class 'int'>,)
PEP-560还提供了
__orig_bases__[n],它允许我们使用第
n 个通用基的参数:
from typing import TypeVar, Generic, get_argsT = TypeVar( "T" )class base( Generic[T] ): passclass Derived( base[int] ): passprint( get_args( Derived.__orig_bases__[0] ) ) # (<class 'int'>,)
旧答案
可能性1
从Python 3.6开始。有一个公共
__args__和(
__parameters__)字段。例如:
print( typing.List[int].__args__ )
这包含通用参数(即
int),而
__parameters__包含通用本身(即
~T)。
可能性2
使用Typeing_inspect.getargs
使用哪个
typing遵循PEP8。PEP8和
typing由Guido
van Rossum合着。前后双下划线定义为: “位于 用户控制的名称空间中的 “魔术”对象或属性”。
这些声音也被在线注释;从官方存储库中键入,我们可以看到:*
“__args__
是下标中使用的所有参数的元组,例如Dict[T, int].__args__ == (T, int)
”。
但是,作者还指出:*
“类型输入模块具有临时状态,因此它没有被高标准的向后兼容性所覆盖(尽管我们尝试保持尽可能多的状态),这对于(尚未记录)尤其如此。
dunder属性,例如__union_params__
。如果您想在运行时上下文中使用键入类型,那么您可能会对typing_inspect
项目感兴趣(其中一部分可能会在以后进行键入)。”
我一般说来,无论您做什么,
typing都需要暂时保持最新。如果需要向前兼容的更改,建议您编写自己的注释类。



