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

为何A().__dict__返回空字典?类与实例的vars差异解析

为什么A().__dict__返回空字典?

先看我们的示例类:

class A(object):
    def go(self):
        print("go A go!")
    def stop(self):
        print("stop A stop!")
    def pause(self):
        raise Exception("Not Implemented")

要搞懂这个问题,得先分清类和实例的__dict__各自存什么:

  • 类的__dict__(也就是vars(A))存储的是类级别的属性和方法,比如go、stop这些方法,都是属于类A本身的,所以会出现在类的__dict__里。
  • 而实例的__dict__(vars(A()))只负责存储这个实例独有的属性——也就是你后续给这个实例单独添加的属性,从类继承来的方法/属性不会被拷贝到实例的__dict__里。

在你的例子里,创建A()实例后,你没有给它添加任何专属自己的属性,它的所有方法都是从类A继承来的,这些方法只会留在类的__dict__中,不会跑到实例的__dict__里。所以这个实例的__dict__自然是空的。

你可以试试给实例加个属性验证一下:

a = A()
a.my_custom_attr = "I belong to this instance only"
print(a.__dict__)  # 输出: {'my_custom_attr': 'I belong to this instance only'}

这时候实例的__dict__就有内容了,因为my_custom_attr是这个实例独有的,不是从类继承来的。

另外补充一句:dir()和__dict__不一样,dir()会列出对象所有可访问的属性(包括继承来的),所以dir(A)和dir(A())会有大量重叠内容;而vars()只返回对象自己__dict__里的内容,所以类和实例的vars()结果差异很大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:02:55