python-sub-Konstruktor der Klasse
In python OOP, sagen wir, die Person ist ein Elternteil der Klasse mit Ihren eigenen Konstruktor, dann Student eine Unterklasse von Person, bevor ich mit Studenten, muss Person.__init__(self)
werden zuerst aufgerufen, im Konstruktor von Student? Plus, kann ich definieren Sie einen neuen Konstruktor in der Schüler-Klasse?
class Person():
def __init__(self):
Oben ist Klasse Person mit dem Konstruktor
class Student(Person):
def __init__(self):
Person.__init__(self)
def __init__(self, age)
Was ich meine ist, konnten Schüler Ihre eigenen Konstruktor? Wenn dem so ist, muss Person.__init__(self)
aufgerufen werden, in der Student-Konstruktor in diesem Fall?
InformationsquelleAutor ladyfafa | 2010-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich
Student
kann einen eigenen Konstruktor. Aber eine Klasse kann nur einen Konstruktor in Python, es gibt nichts wie Konstruktor überladen.So, wenn wir sagen, dass eine sub-Klasse hat Ihren eigenen Konstruktor, da meinen wir wirklich so etwas wie dieses:
Als @IanH wies darauf hin, Sie haben nicht nennen der super-Klasse-Konstruktor.
Und wenn Sie denken, Sie sollten es nennen (wahrscheinlich für einige gemeinsame Initialisierung), Sie können es so machen:
Dies ist der richtige Weg, es zu tun, sondern mehr darüber, was
super()
wirklich nicht hier: fuhm.net/super-harmful . Es ist gut zu Lesen, die in einem mehr Allgemeinen Sinne auch, als die point of mit **kwargs und keyword-Parameter ist nützlich in vielen Situationen.Vielen Dank für den link. Wenn ich aber verstanden, dass dieser Aufsatz richtig, es ist böse, nur wenn Sie versuchen, multi-Vererbung, richtig? Also ich denke, es ist multi-Erbe, das ist schädlich 🙂
InformationsquelleAutor satoru
Nein, es würde wie folgt Aussehen:
Wenn Sie nicht
Person.__init__
in der Schüler-Klasse, die Sie zu tun haben all die Dinge, die Sie tun, in der Person-Klasse in der Schüler-Klasse, wenn Sie wollte werden in der Lage, es zu benutzen, wie ein Mensch.btw, darf ich wissen, wie Bearbeiten Sie den code in ein schönes format, wenn ich versuchte zu posten, jedes Stück code hier? Dein code sieht gut aus,
ladyfafa: Einfach Einrücken von code-Zeilen, die von 4 Räumen (+ die Räume, die für den python-code) und Stackoverflow Kolorieren wird es automagisch.
vielen Dank ~~
Für code-Blöcke Gedankenstrich alle Zeilen, die mit Leerzeichen, zum Beispiel indem Sie den code und klicken auf den 101010-button im editor (Oder mit Strg-K über die Tastatur). Für inline-code verwenden, backticks, oder, dass die gleiche Taste/Tastenkombination. Mehr siehe stackoverflow.com/editing-help oder die Erklärungen rechts neben dem edit-Fenster.
InformationsquelleAutor Zimm3r
Student
kann einen eigenen Konstruktor. In python geben, die Sie kann oder kann nicht der Aufruf der Basisklasse Konstruktor, aber es ist gute Praxis, dies zu tun.InformationsquelleAutor IanH
Es muss nicht sein, Nein, aber es sollte wirklich. Wenn die Basisklasse hat alle Methoden oder Eigenschaften, die nicht überschrieben, in der abgeleiteten Klasse die Basisklasse sollte ordnungsgemäß initialisiert werden kann, ansonsten werden diese Methoden und Eigenschaften können nicht arbeiten.
EDIT: lassen Sie mich klarstellen. Sie kann definieren Sie einen Konstruktor für
Student
aber, dass der Konstruktor wirklich rufen solltePerson.__init__
um sicherzustellen, dass die Basisklasse wird initialisiert richtig.InformationsquelleAutor Peter Milley
Angepasst Zimm3r Antwort, aber mit
super
für maximale Richtigkeit:InformationsquelleAutor habnabit
Können Sie überlastung Python ' s
__new__
geht es vor__init__
, dass das, was Sie suchte in Ihrer ursprünglichen Frage.InformationsquelleAutor Volodymyr Prysiazhniuk