我将类型信息存储在变量x
中:
x = typing.List[str]
稍后,此x
与x_value
一起传递,我想根据x
是否为 typing.List
来切换逻辑。我知道typing
不应与isinstance
和issubclass
一起使用,因此我说是。 issubtype
是否有任何标准的,未来的证明(以及Python 3.6证明)?
import sys
from typing import List
def issubtype(sub_type, parent_type):
if sys.version_info >= (3, 7):
if not hasattr(sub_type, '__origin__') or not hasattr(parent_type, '__origin__'):
return False
if sub_type.__origin__ != parent_type.__origin__:
return False
if isinstance(parent_type.__args__[0], type):
return sub_type.__args__ == parent_type.__args__
return True
else:
if not hasattr(sub_type, '__extra__') or not hasattr(parent_type, '__extra__'):
return False
if sub_type.__extra__ != parent_type.__extra__:
return False
if not parent_type.__args__ or parent_type.__args__ == sub_type.__args__:
return True
return False
assert issubtype(List[str], List[str])
assert issubtype(List[str], List)
assert issubtype(List[int], List[int])
assert not issubtype(List[int], List[str])
当尝试实现此功能时,我意识到任何好的解决方案都必须递归地检查args(我的尝试没有做,但是对我来说,仅知道某物是否为列表就足够了。)