Heim >Backend-Entwicklung >Python-Tutorial >Warum wird __init__() in Python immer nach __new__() aufgerufen?
Verstehen der Beziehung zwischen __new__() und __init__()
Die Methoden __new__() und __init__() in Python spielen eine entscheidende Rolle in die Erstellung und Initialisierung von Klasseninstanzen. __new__() wird vor __init__() aufgerufen und ist für die Erstellung einer neuen Klasseninstanz verantwortlich, indem Speicher dafür zugewiesen wird. Andererseits wird __init__() verwendet, um die Attribute der Instanz zu initialisieren und alle notwendigen Einstellungen vorzunehmen.
Lassen Sie uns nun tiefer auf Ihre Frage eingehen, warum __init__() immer nach __new__() aufgerufen wird. __new__() soll eine neue Instanz der erstellten Klasse zurückgeben. Nachdem __new__() die Instanz erstellt hat, wird sie als Parameter zur Initialisierung an __init__() übergeben. Durch diese sequentielle Ausführung wird sichergestellt, dass __init__() auf die Attribute der Instanz zugreifen und diese ändern kann, nachdem sie erfolgreich erstellt wurde.
In Ihrem bereitgestellten Beispiel fragen Sie sich möglicherweise, warum __init__() nicht für vorhandene Instanzen ausgeführt wird (z. B. a2 und a3). Dies liegt daran, dass Sie in __new__() eine benutzerdefinierte Logik implementiert haben, die nach einer vorhandenen Instanz im _dict-Wörterbuch sucht und diese zurückgibt, wenn eine gefunden wird. In diesen Fällen wird __init__() übersprungen, da die Instanz bereits zuvor erstellt und initialisiert wurde.
Um Ihre beabsichtigte Funktionalität anders zu implementieren, könnten Sie in Betracht ziehen, ein Standard-Factory-Muster zu verwenden, anstatt __new__() zu ändern. Mit einem Factory-Muster können Sie die Erstellung eines Objekts von seiner Implementierung trennen und so für mehr Flexibilität und Wiederverwendbarkeit in Ihrem Code sorgen.
Das obige ist der detaillierte Inhalt vonWarum wird __init__() in Python immer nach __new__() aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!