2011-05-20 22 views
7

Estoy intentando acceder a una variable desde la clase base. Aquí está la clase padre:Python: el objeto 'super' no tiene ningún atributo 'attribute_name'

class Parent(object): 
    def __init__(self, value): 
     self.some_var = value 

Y aquí está la clase hija:

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

    def doSomething(self): 
     parent_var = super(Child, self).some_var 

Ahora, si trato de ejecutar este código:

obj = Child(123) 
obj.doSomething() 

consigo la siguiente excepción:

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' 

¿Qué estoy haciendo? ¿incorrecto? ¿Cuál es la forma recomendada de acceder a las variables de la clase base en Python?

Respuesta

17

Después de __init__ RAN de la clase base, el objeto derivado tiene los atributos establecidos allí (por ejemplo some_var) ya que es el mismo objeto como el self en la clase derivada __init__. Puede y debe simplemente usar self.some_var en todas partes. super es para acceder a cosas desde las clases base, pero las variables de instancia son (como su nombre lo dice) parte de una instancia, no parte de la clase de esa instancia.

4

El atributo some_var no existe en la clase Parent.

Cuando lo configuró durante __init__, se creó en la instancia de su clase secundaria.

Cuestiones relacionadas