Heim >Backend-Entwicklung >Python-Tutorial >Wann folgt „__init__()' bei der Python-Klasseninstanziierung nicht auf „__new__()'?
Die Reihenfolge der Ausführung von __new__() und __init__() verstehen
Die Methoden __new__() und __init__() von Python spielen im Unterricht eine wichtige Rolle Instanziierung. __new__() erstellt eine neue Instanz einer Klasse, während __init__() diese Instanz initialisiert. Die erwartete Ausführungsreihenfolge besteht darin, dass __new__() vor __init__() aufgerufen wird.
Ein bestimmtes Szenario kann diese Reihenfolge jedoch ändern. Bei der Implementierung einer benutzerdefinierten __new__()-Methode ist es möglich, die Instanzerstellung zu manipulieren und eine vorhandene Instanz zurückzugeben, anstatt eine neue zu erstellen. Dieses Verhalten wird verwendet, um Muster wie das Flyweight-Designmuster zu implementieren.
In solchen Fällen kann es sein, dass __init__() nach __new__() aufgerufen wird, obwohl dies unerwartet ist. __init__() wird immer nach __new__() aufgerufen, es sei denn, das benutzerdefinierte __new__() gibt ein vorhandenes Objekt zurück.
Um dieses Problem zu beheben, sollten Sie erwägen, die gewünschte Funktionalität auf konventionellere Weise zu implementieren, z. B. mithilfe einer Factory-Funktion. Alternativ können Sie den Initialisierungscode in die benutzerdefinierte Methode __new__() einschließen. Dieser Ansatz kann jedoch als „hacky“ angesehen werden und wird nicht als beste Vorgehensweise empfohlen.
Das obige ist der detaillierte Inhalt vonWann folgt „__init__()' bei der Python-Klasseninstanziierung nicht auf „__new__()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!