为何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
相关产品推荐
相关产品推荐

