确定对象的类型是否与通过键入模块定义的嵌套类型匹配

时间:2019-01-23 17:42:02

标签: python python-typing

使用 typing 模块,可以指定任意嵌套类型,例如List[str]Dict[str, Dict[str, float]]。有没有一种方法可以确定对象的类型是否与此类匹配?类似于

>>> from typing import List
>>> isinstance(['a', 'b'], List[str])
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "/home/cbieganek/anaconda3/lib/python3.6/typing.py", line 1162, in __instancecheck__
#     return issubclass(instance.__class__, self)
#   File "/home/cbieganek/anaconda3/lib/python3.6/typing.py", line 1148, in __subclasscheck__
#     raise TypeError("Parameterized generics cannot be used with class "
# TypeError: Parameterized generics cannot be used with class or instance checks

我真的没想到isinstance()会为此工作,但是我想知道是否还有其他可接受的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

泛型作为类型hinting的一部分出现在python中。使用 List [str] 的便捷方法是变量或函数参数的类型提示:

my_list: List[str] = ['1', '2']

def do_something(strings: List[str])->None:
    ...

大多数现代IDE(例如PyCharm或Athom)都具有支持python代码的静态类型检查的插件,另请参见mypy。如果需要严格的运行时类型检查,则可以遍历列表并检查每个项目类型,但这不是一个好的设计。