Heim >Backend-Entwicklung >Python-Tutorial >Warum wird die Methode „__init__()' von Python immer nach „__new__()' aufgerufen?
Verstehen der Reihenfolge der Methoden __new__() und __init__()
In Python kommen beim Erstellen eines Objekts zwei wesentliche Methoden ins Spiel : __new__() und __init__(). Während __init__() üblicherweise mit der Objektinitialisierung in Verbindung gebracht wird, spielt __new__() eine grundlegende Rolle beim Erstellen einer neuen Instanz der Klasse.
Warum wird __init__() immer nach __new__() aufgerufen?
Der Grund, warum __init__() immer nach __new__() aufgerufen wird, ergibt sich aus dem Instanziierungsprozess des Klassenobjekts. Beim Erstellen eines neuen Objekts einer Klasse führt Python zunächst die Methode __new__() aus. Diese Methode ist für die Speicherzuweisung, die Erstellung der neuen Instanz und deren Rückgabe verantwortlich.
Sobald die __new__()-Methode die neue Instanz erfolgreich erstellt hat, ruft Python die __init__()-Methode auf. Die __init__()-Methode wird, wie der Name schon sagt, verwendet, um die neue Instanz zu initialisieren, indem ihre Attribute festgelegt und der erforderliche Setup-Code ausgeführt wird.
Ein Beispiel für __new__()- und __init__()-Interaktionen
Betrachten Sie den folgenden Python-Code:
class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Singleton, cls).__new__(cls) return cls._instance def __init__(self): # Instance-specific initialization code
In diesem Beispiel der Singleton Die Klasse implementiert ein Singleton-Entwurfsmuster mit __new__(). Die Methode __new__() prüft, ob bereits eine Instanz vorhanden ist und gibt diese zurück, wenn dies der Fall ist. Andernfalls erstellt es eine neue Instanz mit der super()-Methode und weist sie dem _instance-Attribut zu.
Die __init__()-Methode wird dann aufgerufen, um die neu erstellte Instanz zu initialisieren. In diesem Fall kann es verwendet werden, um zusätzliche Attribute festzulegen oder andere notwendige Einstellungen durchzuführen.
Alternativen zur Verwendung von __new__()
Während __new__() Flexibilität bietet Da es sich um die Steuerung der Instanzerstellung handelt, wird dies im Allgemeinen nicht für Code für allgemeine Zwecke empfohlen. Eine Alternative ist das Factory-Muster, mit dem Sie Objekte erstellen können, ohne die zugrunde liegende Erstellungslogik offenzulegen.
Fazit
Zusammenfassend lässt sich sagen, dass __new__() und __init__() funktionieren unterschiedliche Rollen im Objektinstanziierungsprozess in Python. __new__() übernimmt die Erstellung der neuen Instanz, während __init__() sie initialisiert. Das Verständnis des Zusammenspiels dieser Methoden ist für das Entwerfen und Implementieren robusten objektorientierten Codes von entscheidender Bedeutung.
Das obige ist der detaillierte Inhalt vonWarum wird die Methode „__init__()' von Python immer nach „__new__()' aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!