Je suis débutant en python. Je ne comprends pas l'héritage et __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
RÉSULTAT: 8
C'est acceptable. Mais je remplace Num2
Par
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
RÉSULTAT: Error. Num2 has no attribute "n1".
Dans ce cas, comment Num2
Peut-il accéder à n1
?
Dans le premier cas, Num2
Étend la classe Num
et comme vous ne redéfinissez pas la méthode spéciale nommée __init__()
dans Num2
, Elle est héritée de Num
.
Lorsqu'une classe définit une méthode
__init__()
, l'instanciation de classe appelle automatiquement__init__()
pour l'instance de classe nouvellement créée.
Dans le second cas, puisque vous redéfinissez __init__()
dans Num2
, Vous devez appeler explicitement celui de la super classe (Num
) si vous souhaitez étendre son comportement.
class Num2(Num):
def __init__(self,num):
Num.__init__(self,num)
self.n2 = num*2
Lorsque vous remplacez init, vous devez également appeler init de la classe parente.
super(Num2, self).__init__(num)
Puisque vous n'appelez pas Num.__init__
, le champ "n1" n'est jamais créé. Appelez-le et ce sera là.