Der Destruktor wird aufgerufen, wenn das Objekt zerstört wird. In Python sind Destruktoren nicht so wichtig wie in C++, da Python über einen Garbage Collector verfügt, der die Speicherverwaltung automatisch übernimmt. Die Methode __del__() wird in Python als Destruktormethode bezeichnet. Diese Funktion wird aufgerufen, wenn alle Verweise auf das Objekt entfernt wurden, d. h. wenn ein Objekt der Garbage Collection unterzogen wird.
Syntax für die Destruktordeklaration:
def __del__(self): # body of destructor
Beispiel 1: Nachfolgend finden Sie ein einfaches Beispiel für einen Destruktor. Der Destruktor wird automatisch aufgerufen, indem alle Verweise auf das Objekt „obj“ mithilfe des Schlüsselworts del entfernt werden.
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created.') # Deleting (Calling destructor) def __del__(self): print('Destructor called, Employee deleted.') obj = Employee() del obj
Ausgabe:
Employee created. Destructor called, Employee deleted.
Hinweis: Der Destruktor wird aufgerufen, nachdem das Programm beendet wurde oder wenn alle Verweise auf das Objekt gelöscht wurden. Wenn der Referenzzähler Null erreicht, nicht wenn das Objekt den Gültigkeitsbereich verlässt.
Beispiel 2: Dieses Beispiel erläutert die oben genannten Überlegungen. Beachten Sie hier, dass der Destruktor aufgerufen wird, nachdem „Program End...“ ausgegeben wurde.
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created') # Calling destructor def __del__(self): print("Destructor called") def Create_obj(): print('Making Object...') obj = Employee() print('function end...') return obj print('Calling Create_obj() function...') obj = Create_obj() print('Program End...')
Ausgabe:
Calling Create_obj() function... Making Object... Employee created function end... Program End... Destructor called
Beispiel 3: Betrachten Sie nun das folgende Beispiel:
# Python program to illustrate destructor class A: def __init__(self, bb): self.b = bb class B: def __init__(self): self.a = A(self) def __del__(self): print("die") def fun(): b = B() fun()
Ausgabe:
die
In diesem Wenn im Beispiel die Funktion fun() aufgerufen wird, erstellt sie eine Instanz der Klasse B, die sich selbst an Klasse A übergibt, die dann einen Verweis auf Klasse B setzt und einen Zirkelverweis erstellt.
Normalerweise würde der Garbage Collector von Python, der zum Erkennen dieser Art von Zirkelverweisen verwendet wird, diese entfernen, aber in diesem Beispiel wird ein benutzerdefinierter Destruktor verwendet, um dieses Element als „nicht einsammelbar“ zu markieren.
Einfach ausgedrückt: Es kennt die Reihenfolge, in der Objekte zerstört werden, nicht und lässt sie daher in Ruhe. Wenn Ihre Instanzen also Zirkelverweise beinhalten, bleiben diese im Speicher bestehen, solange die Anwendung ausgeführt wird.
Verwandte Empfehlungen: „Python-Tutorial“
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Destruktors in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!