我当前正在编写代码,需要知道给定的类型注释是否可迭代(例如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.
这真的是正确的方法吗?
答案 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
是一个未记录的受保护/生成的类。这是一个实现细节。我不知道在运行时访问类型信息的任何可靠方法。