Seite 1 von 1
__del__ methode wird nicht aufgerufen bei del objekt
Verfasst: Dienstag 29. Juni 2004, 02:41
von killroy84
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
Verfasst: Dienstag 29. Juni 2004, 08:20
von NEBULA
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:
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
Verfasst: Dienstag 29. Juni 2004, 14:14
von killroy84
danke für die schnelle antwort
dann werd ich mich mal daran machen das anzupassen.
Re: __del__ methode wird nicht aufgerufen bei del objekt
Verfasst: Dienstag 29. Juni 2004, 15:06
von joerg
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
Verfasst: Dienstag 29. Juni 2004, 16:37
von Dookie
Hi,
um Funktionen/Methoden beim Programmende auszuführen gibts
atexit.
Gruß
Dookie
Verfasst: Dienstag 29. Juni 2004, 16:54
von killroy84
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.
Verfasst: Dienstag 29. Juni 2004, 18:02
von Dookie
tja, da heissts halt sauber programmieren und Resourcen nur so lange halten wie sie auch gebraucht werden.
Gruß
Dookie