如何检查对象的类型为'dict_items'?

Eri*_*ric 8 python dictionary types python-3.x python-collections

在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
Run Code Online (Sandbox Code Playgroud)

dict_items不是一个已知的类型.它没有在types模块中定义.如何测试具有类型的对象dict_items(不消耗数据)?

jpp*_*jpp 10

你可以使用collections.abc:

from collections import abc

isinstance(d.items(), abc.ItemsView)  # True
Run Code Online (Sandbox Code Playgroud)

请注意,按照@ schwobaseggl的评论,这dict_items是一个子类abc.ItemsView,而不是同一类.为了更高的精度,您可以使用:

isinstance(d.items(), type({}.items()))
Run Code Online (Sandbox Code Playgroud)

为了澄清上述内容,您可以使用issubclass:

issubclass(type(d.items()), abc.ItemsView)  # True
issubclass(abc.ItemsView, type(d.items()))  # False
Run Code Online (Sandbox Code Playgroud)

  • 然而,这比例如`isinstance(d.items(),type({}.items()))`更加慷慨,因为`ItemsView`是`dict_items`的超类.这可能是也可能不是OP想要的. (2认同)