为何调用super().__dict__会触发AttributeError?
为什么访问super()对象的__dict__会触发AttributeError?
先看你的代码:
class A: def f(self): print(super().__dict__) A().f() # raises AttributeError: 'super' object has no attribute '__dict__'
原因很直接:
super()返回的是一个代理对象,它的唯一作用是帮你代理访问当前类MRO(方法解析顺序)链中父类的属性和方法,本身并不是一个普通的类实例。- 普通Python实例的
__dict__是用来存储自身实例属性的容器,但super代理对象根本不需要这个——它只是个“中间商”,不会存储任何实例属性,自然也就没有__dict__这个属性。 - 当你尝试访问
super().__dict__时,Python会先在super对象本身查找该属性,找不到就去super类里找,而super类本身并没有定义__dict__,所以直接抛出AttributeError。
如果要访问实例自身的属性字典,直接用self.__dict__就可以,super对象不是干这个用的。
内容的提问来源于stack exchange,提问作者zwithouta
相关产品推荐
相关产品推荐

