hi,
habe ein Problem mit dem Überladen der __del__ Methode.
Und zwar habe ich ein Objekt, auf das es in anderen Objekten (Listen/Dictionaries z.B.) Verweise gibt. Diese sollen nun entfernt werden, wenn das Objekt selbst gelöscht wird.
Deswegen will ich die __del__ Methode überladen.
Nun habe ich einfach mal eine print Anweisung reingesetzt, um zu testen, ob die methode überhaupt aufgerufen wird, was dann allerdings nicht der Fall war
kann mir da wer helfen?
thx im vorraus,
k84
__del__ methode wird nicht aufgerufen bei del objekt
Ich habs grad mal ausprobiert und wenn ich mein Ergebnis richtig interpretiere wird die __del__-Methode einer Instanz dann aufgerufen wenn der letzte Verweis auf diese Instanz geloescht wird.
Beispiel:
Beispiel:
Code: Alles auswählen
Beispiel 1
class testklasse:
def __del__(self):
print "DEL"
testinstanz = testklasse()
del testinstanz
---> __del__ wird ausgefuehrt, da nur ein Verweis auf testinstanz
vorhanden ist und dieser hier geloescht wird
Beispiel 2
class testklasse:
def __del__(self):
print "DEL"
testinstanz = testklasse()
testarray = [testinstanz]
del testinstanz
---> __del__ wird nicht ausgefuehrt, da im testarray noch
ein Verweis auf testinstanz vorhanden ist
del testarray
---> __del__wird ausgefuehrt, da mit dem loeschen des Arrays der letzte Verweis auf testinstanz geloescht wird
Aus der Python-Doku:
"It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits."
Auf __del__ beim Programmende darf man sich nicht verlassen!
Jörg
"It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits."
Auf __del__ beim Programmende darf man sich nicht verlassen!
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Ne, ich wollte ja, dass alle verweise verschwinden wenn ich
del <objekt>
ausführe.
Scheint nur halt nicht so ganz machbar zu sein, zumindest nicht mit einfachem Überladen der __del__ methode, wenn ich das richtig verstanden habe (da die __del__ methode erst aufgerufen wird, wenn alle Verweise schon weg sind)
Der Auszug aus der Doku bezog sich ja nur auf den Aufruf bei Programmende.
del <objekt>
ausführe.
Scheint nur halt nicht so ganz machbar zu sein, zumindest nicht mit einfachem Überladen der __del__ methode, wenn ich das richtig verstanden habe (da die __del__ methode erst aufgerufen wird, wenn alle Verweise schon weg sind)
Der Auszug aus der Doku bezog sich ja nur auf den Aufruf bei Programmende.