Python:'super'对象没有属性'attribute_name'

inv*_*ass 15 python attributes super

我试图从基类访问变量.这是父类:

class Parent(object):
    def __init__(self, value):
        self.some_var = value
Run Code Online (Sandbox Code Playgroud)

这是儿童班:

class Child(Parent):
    def __init__(self, value):
        super(Child, self).__init__(value)

    def doSomething(self):
        parent_var = super(Child, self).some_var
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试运行此代码:

obj = Child(123)
obj.doSomething()
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    obj.doSomething()
  File "test.py", line 10, in doSomething
    parent_var = super(Child, self).some_var
AttributeError: 'super' object has no attribute 'some_var'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?在Python中从基类访问变量的推荐方法是什么?

小智 24

在基类__init__运行之后,派生对象具有在那里设置的属性(例如some_var),因为它self与派生类中的对象完全相同__init__.你可以而且应该只self.some_var在任何地方使用.super用于从基类访问内容,但实例变量(如名称所示)是实例的一部分,而不是该实例类的一部分.


Mar*_*k P 5

parent类中不存在some_var属性.

在您设置期间__init__,它是在您的Child类的实例中创建的.