You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dict_items类继承显示异常:为何issubclass与__mro__结果矛盾?

关于dict_items与collections.abc.ItemsView的继承疑问解析

我在查看Stack Overflow的一篇回答时发现,<class 'dict_items'>是<class 'collections.abc.ItemsView'>的子类,可通过以下代码验证:

>>> import collections
>>> issubclass({}.items().__class__, collections.abc.ItemsView)
True

但我查看dict_items类的__mro__属性时,并未发现collections.abc.ItemsView,结果为:

>>> {}.items().__class__.__mro__
(<class 'dict_items'>, <class 'object'>)

同时,查看collections.abc.ItemsView的子类列表,仅返回[<class 'collections._OrderedDictItemsView'>]。想请教为何会出现这种矛盾情况?


这是因为Python的**抽象基类(ABC)**采用了「虚拟子类」机制,而非传统的继承关系:

  • collections.abc.ItemsView是抽象基类,它通过register()方法把dict_items注册为自己的虚拟子类。这种注册不需要修改dict_items的继承链,所以__mro__里看不到ItemsView的身影。
  • issubclass()和isinstance()这类内置函数会识别虚拟子类关系,所以会返回True,但虚拟子类不会出现在基类的__subclasses__()结果里,也不会进入目标类的方法解析顺序(MRO)。
  • 这种设计是为了让内置类型(比如dict_items这种由C实现的底层类)无需修改自身结构,就能适配抽象基类定义的接口规范,同时保持底层实现的高效性。

内容的提问来源于stack exchange,提问作者gitartha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:10:04