Heim > Backend-Entwicklung > Python-Tutorial > Detaillierte Erklärung des Destruktors in Python

Detaillierte Erklärung des Destruktors in Python

藏色散人
Freigeben: 2019-04-01 14:28:16
Original
9286 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Ausgabe:

Employee created.
Destructor called, Employee deleted.
Nach dem Login kopieren

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...')
Nach dem Login kopieren

Ausgabe:

Calling Create_obj() function...
Making Object...
Employee created
function end...
Program End...
Destructor called
Nach dem Login kopieren

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()
Nach dem Login kopieren

Ausgabe:

die
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage