typing
模块为通用类型提示提供了一个基类: typing.Generic
类。
Generic
的子类接受方括号中的类型参数,例如:
list_of_ints = typing.List[int]
str_to_bool_dict = typing.Dict[str, bool]
我的问题是,如何访问这些类型参数?
也就是说,给定 str_to_bool_dict
作为输入,我怎样才能得到 str
和 bool
作为输出?
基本上我正在寻找这样的功能
>>> magic_function(str_to_bool_dict)
(<class 'str'>, <class 'bool'>)
原文由 Aran-Fey 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python >= 3.8
从 Python3.8 开始,有
typing.get_args
:PEP-560 还提供了
__orig_bases__[n]
,它允许我们使用第 n 个通用基础的参数:Python >= 3.6
从 Python 3.6 开始。有一个公共
__args__
和 (__parameters__
) 字段。例如:这包含通用参数(即
int
),而__parameters__
包含通用参数本身(即~T
)。Python < 3.6
使用 typing_inspect.getargs
一些注意事项
typing
遵循 PEP8 。 PEP8 和typing
均由 Guido van Rossum 合着。前后双下划线定义为: “存在于 用户控制的名称空间 中的“魔法”对象或属性” 。dunders 也在线评论;从官方 打字 库中我们可以看到:
__args__
是下标中使用的所有参数的元组,例如Dict[T, int].__args__ == (T, int)
”。但是, 作者还指出:
__union_params__
。如果您想在运行时上下文中使用键入类型,那么您可能会对typing_inspect
项目感兴趣(其中一部分可能会在稍后键入)。”我一般来说,无论你用
typing
做什么,都需要暂时保持最新。如果您需要向前兼容的更改,我建议您编写自己的注释类。