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

Python继承dict的自定义类方法分类疑问:为何仅fromkeys等少数方法归属于自定义类?

关于自定义字典子类方法分类的疑问解答

为什么大部分dict的方法没被归类到A类?

核心原因是继承的方法并未被子类重新定义,它们的归属仍然是父类dict。

当你写class A(dict): pass时,A只是继承了dict的所有方法,但并没有自己实现这些方法。比如A.__getitem__、A.clear这些方法,本质上还是dict类里的原始实现。Python的__qualname__属性会记录方法的“原生归属类”,所以你通过A.__getitem__.__qualname__拿到的是dict.__getitem__,你的代码自然就把它归类到dict的集合里了。

只有两种方法会被分到A类:

  • 你自己在A里定义的方法,比如ff
  • Python自动为子类生成的特殊方法/属性,比如__init_subclass__、__subclasshook__、__weakref__——这些是Python为新式子类默认添加的,归属自然是A。

为什么fromkeys被归类到A类,而不是dict?

fromkeys是dict的类方法,它的绑定逻辑和实例方法不一样:当你通过子类访问类方法时,Python会自动把这个方法绑定到子类上。

举个例子,当你调用A.fromkeys(),这个方法内部会默认创建A的实例(除非你重写它),同时它的__qualname__会变成A.fromkeys——所以你的代码拆分后,会把它归类到A的集合里。而如果你直接访问dict.fromkeys,它的__qualname__才是dict.fromkeys,会被分到dict的集合中。

补充:你的分类逻辑的关键点

你的代码是用__qualname__来判断方法归属的,这个属性的作用就是标记方法在类层次中的“限定名称”。对于继承来的未重写方法,它们的__qualname__还是指向父类;只有子类自己定义的、或者被自动绑定到子类的方法(比如fromkeys这类类方法),才会带有子类的限定名,因此被归类到子类集合里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:07:30