So wie ich es verstehe, unterscheidet sich __init__
von einem Konstruktor in Java, weil __init__
nur ein Objekt initialisiert, das bereits implizit konstruiert wurde (weil __init__
nach __new__
aufgerufen wird). Alles, was ich jemals definieren musste, hat diese letztere Eigenschaft eines 'Konstruktors' in Java verwendet. Was wäre ein Fall, in dem ein Programmierer __new__
? Überschreiben möchte?
BEARBEITEN : Für die Aufnahme frage ich teilweise, weil ich mich frage, was wäre der Vorteil / Nachteil zu überschreiben neu vs mit einer separaten Klassenmethode in der akzeptierten Beantworte diese Frage:
__new__
passiert tatsächlich, bevor ein Objekt existiert. Es ist eine statische Methode des Typs. Verwendung von __new__
ist, wenn Sie die Erstellung neuer Objekte, z. ein Singleton. Wenn Ihr __new__
immer dieselbe Instanz eines Objekts zurückgibt, handelt es sich um ein Singleton. Das kannst du nicht mit __init__
machen.
Im Allgemeinen sollten Sie in "python so wie es Guido beabsichtigt hat" nicht __new__
mehr als einmal pro Monat verwenden:)
__new__
dient zum Erstellen einer neuen Objektinstanz, __init__
dient zum Initialisieren.
Ich denke, wenn Sie einen unveränderlichen Typ entwerfen, müssen Sie ihn in __new__
initialisieren, siehe zB namedtuple
(auch Pythons Verwendung von __new__ und __init__? ).
Tags und Links python