访问打字类型

时间:2018-08-21 17:16:13

标签: python-3.x typing

我当前正在编写代码,需要知道给定的类型注释是否可迭代(例如ta = typing.List[str]

我期待某事。像这样工作:

if isinstance(ta, typing.List):
    # do s.th.

但是,ta是typing._GenericAlias类型,与type.List没有多大关系。

相反,我必须像这样使用“ 起源”属性:

if getattr(ta, '__origin__', None) == list:
    # do s.th.

这真的是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

在CPython 3.8中:

from typing import_GenericAlias

# Now, let's suppose that you have a class "cls"
name = "your_attribute"
typ = cls.__annotations__[name]
if isinstance(typ, _GenericAlias) and typ._name == "List":
    print("This is a list type")

_GenericAlias是一个未记录的受保护/生成的类。这是一个实现细节。我不知道在运行时访问类型信息的任何可靠方法。