Ich bin Anfänger von Python. Ich kann Vererbung nicht verstehen und __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
ERGEBNIS: 8
Das ist in Ordnung. Aber ich ersetze Num2
durch
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
ERGEBNIS: Error. Num2 has no attribute "n1".
Wie kann in diesem Fall Num2
zugegriffen werden n1
?
python
inheritance
init
Yugo Kamo
quelle
quelle
__init__
Methode, die in einer abgeleiteten Klasse nicht definiert ist , vererbt wird. Dies liegt daran, dass "wenn ein angefordertes Attribut in der Klasse nicht gefunden wird, die Suche in der Basisklasse fortgesetzt wird". (doc)super(Num2, self).__init__(num)
?super
, und mein Programm wird jetzt einige Sekunden schneller geladen. Keine Ahnung warum.super
soll bei der Verwendung von Mehrfachvererbung hilfreich sein. Bei Einzelvererbung liegen die Vorteile nicht auf der Hand.Wenn Sie den Init überschreiben, müssen Sie auch den Init der übergeordneten Klasse aufrufen
Grundlegendes zu Python super () mit __init __ () Methoden
quelle
Da Sie nicht aufrufen
Num.__init__
, wird das Feld "n1" nie erstellt. Rufen Sie es an und dann wird es da sein.quelle
Eine einfache Änderung in der Num2-Klasse wie folgt:
quelle