Soy un principiante de Python. No puedo entender la herencia y __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
RESULTADO: 8
Esto esta bien. Pero reemplazo Num2
con
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
RESULTADO: Error. Num2 has no attribute "n1".
En este caso, ¿cómo puedo Num2
acceder n1
?
python
inheritance
init
Yugo Kamo
fuente
fuente
__init__
método en una clase derivada, se hereda. Es porque "si un atributo solicitado no se encuentra en la clase, la búsqueda procede a buscar en la clase base". (doc)super(Num2, self).__init__(num)
?super
, y mi programa ahora se carga unos segundos más rápido. No tengo idea de por qué.super
se supone que es útil cuando se usa herencia múltiple. Para la herencia única, sus beneficios no son obvios.Cuando anula el init, también debe llamar al init de la clase principal
Entendiendo Python super () con los métodos __init __ ()
fuente
Como no llama
Num.__init__
, el campo "n1" nunca se crea. Llámalo y luego estará allí.fuente
Un simple cambio en la clase Num2 como este:
Funciona en python3.
class Num: def __init__(self,num): self.n1 = num class Num2(Num): def __init__(self,num): super().__init__(num) self.n2 = num*2 def show(self): print (self.n1,self.n2) mynumber = Num2(8) mynumber.show()
fuente