Me gustaría dar a una clase hija algunos atributos adicionales sin tener que llamar explícitamente a un nuevo método. Entonces, ¿hay alguna manera de dar a la clase heredada un método de tipo __init__
que no anule el método __init__
de la clase principal?Método python __init__ en la clase heredada
He escrito el código a continuación puramente para ilustrar mi pregunta (de ahí el mal nombre de los atributos, etc.).
class initialclass():
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
class inheritedclass(initialclass):
def __new__(self):
self.attr3 = 'three'
def somemethod(self):
print 'the method'
a = inheritedclass()
for each in a.__dict__:
print each
#I would like the output to be:
attr1
attr2
attr3
Gracias
llamada 'initialclass .__ init__' en el constructor de la clase derivada. Sin embargo, el orden de 'attrX' no está garantizado. – khachik
* No * anule '__new__' a menos que sepa exactamente lo que hace y por qué necesita jugar con él. Tu propagablemente no sabes. No es otro nombre para '__init__'. Son tres niveles más mágicos que uno que normalmente nos preocupa, especialmente los principiantes. – delnan
Tenga en cuenta que el argumento para '__new__' es la _clase_ de' self', no 'self', ya que es un método de clase implícito. Entonces, en tu ejemplo, en realidad estás configurando el atributo de clase 'inheritedclass.attr3', no' self.attr3' como creías. –