如何检查对象的类型为 'dict_items'?
How to check an object has the type 'dict_items'?
在 Python 3 中,我需要测试我的变量是否具有类型 'dict_items',所以我尝试了类似的方法:
>>> d={'a':1,'b':2}
>>> d.items()
dict_items([('a', 1), ('b', 2)])
>>> isinstance(d.items(),dict_items)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dict_items' is not defined
但是 dict_items
不是已知类型。它也没有在 types
模块中定义。我如何测试一个对象具有 dict_items
类型(不消耗数据)?
您可以使用 collections.abc
:
from collections import abc
isinstance(d.items(), abc.ItemsView) # True
注意 dict_items
是 subclass 的 abc.ItemsView
,而不是 same class。为了更精确,您可以使用:
isinstance(d.items(), type({}.items()))
为了澄清以上内容,您可以使用 issubclass
:
issubclass(type(d.items()), abc.ItemsView) # True
issubclass(abc.ItemsView, type(d.items())) # False
我更喜欢这种方法
d={'a':1,'b':2}
d.items()
assert type(d.items()).__name__ == 'dict_items', 'Not dict_items!!!!'
assert d.items().__class__.__name__ == 'dict_items', 'Not dict_items!!!!'
在 Python 3 中,我需要测试我的变量是否具有类型 'dict_items',所以我尝试了类似的方法:
>>> d={'a':1,'b':2}
>>> d.items()
dict_items([('a', 1), ('b', 2)])
>>> isinstance(d.items(),dict_items)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dict_items' is not defined
但是 dict_items
不是已知类型。它也没有在 types
模块中定义。我如何测试一个对象具有 dict_items
类型(不消耗数据)?
您可以使用 collections.abc
:
from collections import abc
isinstance(d.items(), abc.ItemsView) # True
注意 dict_items
是 subclass 的 abc.ItemsView
,而不是 same class。为了更精确,您可以使用:
isinstance(d.items(), type({}.items()))
为了澄清以上内容,您可以使用 issubclass
:
issubclass(type(d.items()), abc.ItemsView) # True
issubclass(abc.ItemsView, type(d.items())) # False
我更喜欢这种方法
d={'a':1,'b':2}
d.items()
assert type(d.items()).__name__ == 'dict_items', 'Not dict_items!!!!'
assert d.items().__class__.__name__ == 'dict_items', 'Not dict_items!!!!'