Einführung in Destructor in Python
Konstruktoren und Destruktoren sind zwei wichtige Konzepte in Python. Konstruktoren werden aufgerufen, wenn das Objekt einer Klasse erstellt wird. Destruktoren werden jedoch aufgerufen, wenn das Objekt einer Klasse zerstört wird. Daher ist es nicht falsch zu sagen, dass Konstruktoren das Gegenteil von Destruktoren sind. Python, eine objektorientierte Programmiersprache, Konstruktoren und Destruktoren, ist ebenfalls Teil dieser Sprache.
Destruktoren werden in Python nicht so häufig verwendet wie Java und C ++. Aber zu wissen, macht es eine noch stärkere Basis in Python.
Destruktoren können sehr nützlich sein, wenn es um die Vernunft des Programms geht. Zum Beispiel: Freigabe der verwendeten Ressourcen vor dem Verlassen des Programms, z. B. Freigabe von Erinnerungen, Schließen von Dateien usw.
Das Schlüsselwort, mit dem Destructor definiert wird, lautet: __del __ () Schlüsselwort:
Syntax:
def __del__(self):
#destructor body
Wie man sehen kann, ist __del__ das Schlüsselwort, mit dem Destruktor definiert wird. Wenn es aufgerufen wird, werden alle Verweise auf dieses Objekt gelöscht, was auch als Garbage Collection bezeichnet wird.
Beispiele für Destructor in Python
Sehen wir uns verschiedene Beispiele für Destruktoren in Python an, um ein besseres Verständnis zu erhalten:
Beispiel 1
class Grocery:
# Initializing
def __init__(self):
print('Grocery created.')
# Deleting (Calling destructor)
def __del__(self):
print('Destructor called, Grocery deleted.')
obj = Grocery()
del obj
Ausgabe:
"Grocery" ist die Klasse, die mit ihren speziellen Methoden definiert wurde: Konstruktor und Destruktor.
So kann man sehen, sobald das Objekt der Klasse „Lebensmittelgeschäft“ angelegt ist. Es ruft automatisch __init__ auf, den Konstruktor der Klasse. Wenn jedoch "del obj" ausgeführt wird, um ein Objekt zu löschen, wird die Destruktor-Methode automatisch aufgerufen.
Beispiel # 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Ausgabe:
Text ist eine Klasse, „a“ ist eine Objektreferenz auf die Klasse. "B" lokale Kopie dieser Referenz "a". Wenn also b gelöscht wird, wird die Methode nicht aufgerufen, da sie einfach die lokale Kopie enthält.
Vorteile von Destructor in Python
Wie bereits erwähnt, wird der Destruktor in Python nicht so häufig verwendet wie in Java, C ++. Das Konzept bleibt jedoch gleich. Hier sind einige Vorteile der Verwendung in Programmen:
- Nicht benötigte Objekte werden automatisch gelöscht. Dies gibt den Speicherplatz frei, der als Garbage Collection bezeichnet wird.
- Der Vorteil liegt auch in der Tatsache, dass es automatisch aufgerufen wird.
Bestimmte Schritte, die bei Verwendung des Destruktors beachtet werden sollten:
1. Python kennt nicht die Reihenfolge, in der das Zerstören von Objekten sicherer ist, die kreisförmige Verweise zueinander enthalten können. Aus diesem Grund wird empfohlen, "close" explizit nach jeder Funktion zu verwenden. In Ausnahmefällen ist die Verwaltung der Close-Methode jedoch problematisch. Daher ist die Verwendung von Destruktoren unter Berücksichtigung der zyklischen Referenzen besser.
2. Zyklische Referenzen Wenn es nicht gut gehandhabt wird, besteht die Möglichkeit von undichten Abstraktionen und schlechtem Design.
Das Beste ist: Ressourcen sollten vom untersten Objekt der Klasse verwaltet werden.
3. Wenn jemand dringend zyklische Verweise auf Objekte in komplexem Code benötigt, bietet Python eine gute Lösung in Form des Modulnamens: weakref. Dies bedeutet, dass schwache Verweise auf den Verweis bereitgestellt werden, was letztendlich dazu beiträgt, den Cache zu implementieren und das große Objekt nicht mehr am Leben zu erhalten. Wenn ein großes Objekt nicht am Leben ist, bedeutet dies, dass es im Cache angezeigt wird.
Lassen Sie es uns durch einen kleinen Code sehen, um ein klares Verständnis zu erhalten:
Code:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Ausgabe:
Wie man sehen kann, ist "r" eine schwache Referenz auf das Objekt "c".
Wenn wir eine Methode auf "r" verweisen, wie c2 = r (). Dann sollten "c" und "c2" gleich sein, weil sich auf dasselbe bezieht. Siehe das unten gezeigte Beispiel:
Beim Löschen des Hauptobjekts verliert das Referenzobjekt seine Existenz. Siehe das unten gezeigte Beispiel:
Wie man sehen kann, lautet das Ergebnis von print (r ()) „None“. In diesem Fall:
gc.collect () ergibt 0.
4. __del__ sollte nicht mit del in Python verwechselt werden. __del__ ist eine spezielle Methode einer Klasse, die Destruktor ist, und "del" wird verwendet, um eine in der Python-Umgebung definierte Variable zu zerstören. Beides sind zwei völlig verschiedene Dinge.
Mögen:
xx = 10
del xx
Fazit
Nachdem wir den obigen Inhalt durchgearbeitet haben, können wir sagen, dass Konstruktoren und Destruktoren ein entscheidender Bestandteil von Python sind. Destructor spielt eine zentrale Rolle bei der Verwaltung des Speichers, in dem viele Reinigungsaufgaben für Objekte ausgeführt werden, die bei der Programmierung verwendet werden. Der Umgang mit kleinen Programmen liefert möglicherweise nicht das tatsächliche Bild, das hinter der Verwendung von Destruktoren steckt. Während es sich jedoch um Programme auf Produktionsebene oder komplexe Codezeilen handelt, kann die Bedeutung von Destruktoren klar verstanden werden, da die Speichernutzung dort sehr wichtig wird. Unter Berücksichtigung der Idee der zyklischen Referenz kann die Arbeit mit Destruktoren durchaus zu einem guten Design führen.
Empfohlene Artikel
Dies ist eine Anleitung zu Destructor in Python. Hier diskutieren wir die Syntax, die Vorteile und die verschiedenen Beispiele für Python-Destruktoren. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren -
- Abstrakte Klasse in Python
- Python-Editoren
- Python Break-Anweisung
- In Python tauschen
- Beispiele für das Tauschen in PHP
- Break-Anweisung in JavaScript
- Komplette Anleitung zu Destructor in PHP mit Beispielen