Heim >Backend-Entwicklung >Python-Tutorial >Warum wird __init__() in Python immer nach __new__() aufgerufen?

Warum wird __init__() in Python immer nach __new__() aufgerufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 01:56:09226Durchsuche

Why is __init__() Always Called After __new__() in Python?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn