Heim >Backend-Entwicklung >Python-Tutorial >Meine Python-Klasse definiert die Methode __del__, sie wird jedoch nicht aufgerufen, wenn ich das Objekt lösche
__del__ ist eine magische Methode in Python. Diese magischen Methoden ermöglichen es uns, einige sehr nette Tricks in der objektorientierten Programmierung umzusetzen. Sie werden auch Dunder-Methoden genannt. Diese Methoden werden durch zwei Unterstriche (__) identifiziert, die als Präfix und Suffix verwendet werden.
In Python erstellen wir ein Objekt mit __new__() und initialisieren es mit __init__(). Um jedoch ein Objekt zu zerstören, haben wir __del__().
Lassen Sie uns ein Objekt erstellen und löschen -
class Demo: def __init__(self): print("We are creating an object."); # destructor def __del__(self): print("We are deleting an object."); # Createing and deleting an object ob = Demo(); del ob;
We are creating an object. We are deleting an object.
Wenn jedoch eine Klasse __del__ definiert, diese aber beim Löschen eines Objekts nicht aufgerufen wird, kann das viele Gründe haben -
del-Anweisung ruft nicht unbedingt __del__() auf – sie dekrementiert lediglich den Referenzzähler des Objekts und ruft __del__() auf, wenn er Null erreicht.
__del__() kann zufällig aufgerufen werden. – Wenn Ihre Datenstruktur zirkuläre Links enthält, wird der Referenzzähler nie wieder auf Null zurückgehen. Python führt einen Algorithmus aus, um solche Zyklen zu erkennen, der Garbage Collector wird jedoch möglicherweise einige Zeit nach dem Verschwinden des letzten Verweises auf die Datenstruktur ausgeführt.
Hier sind die Korrekturen -
Rufen Sie __del__() nicht direkt auf – _del__() sollte close() aufrufen und close() sollte sicherstellen, dass es mehrmals für dasselbe Objekt aufgerufen werden kann.
Zirkelverweise vermeiden – Verwenden Sie das Weakref-Modul, um Zirkelverweise zu vermeiden. Es ermöglicht Ihnen, auf ein Objekt zu verweisen, ohne dessen Referenzanzahl zu erhöhen. Das Weakref-Modul kann auch verwendet werden, um Instanzen von Klassen abzurufen
Das obige ist der detaillierte Inhalt vonMeine Python-Klasse definiert die Methode __del__, sie wird jedoch nicht aufgerufen, wenn ich das Objekt lösche. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!