+-

typing模块为泛型类型提示提供了基类:
typing.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'>)
最佳答案
可能性1
从Python 3.6开始.有一个公共的__args__和(__parameters__)字段.
例如:
print( typing.List[int].__args__ )
这包含通用参数(即int),而__parameters__包含通用本身(即~T).
可能性2
使用typing_inspect.getargs
使用哪种
键入遵循PEP8.PEP8和打字都是由Guido van Rossum合着的.双引导和尾随下划线定义为:“”魔术“对象或属于用户控制的命名空间的属性”.
dunders也在线评论;从typing的官方存储库我们
可以看到:
*“__ args__是在下标中使用的所有参数的元组,例如,Dict [T,int] .__ args__ ==(T,int)”.
但是,authors also note:
*“打字模块具有临时状态,因此它不符合高标准的向后兼容性(尽管我们尽可能地保持它),对于(但未记录的)dunder属性尤其如此__union_params__.如果你想要在运行时上下文中使用输入类型,那么你可能会对typing_inspect项目感兴趣(其中一部分可能会在以后的输入中结束).“
我一般而言,无论你做什么打字,都需要暂时保持最新状态.如果您需要向前兼容的更改,我建议您编写自己的注释类.
点击查看更多相关文章
转载注明原文:如何访问typing.Generic的类型参数? - 乐贴网