meneliel hat geschrieben:alfonsospringer hat geschrieben:
Hoffe damit ist deine Frage beantwortet
^^ nee. Genau DESWEGEN hab ich __del__ ja verwendet und dort Code reingepackt, der ausgeführt werden soll, wenn die Klasse "stribt". Wird somit ja auch ausgeführt, wenn aus irgendeinem Grund mein Script abstürzt oder was weiß ich. ... erzählte mir zumindest ein Java-Entwickler
Und wie kommst du darauf, dass eine für Java gültige Aussage automatisch auch für Python Gültigkeit hätte? Auch in Java ist es schlecht, zum Bereinigen von Ressourcen finalize() zu nutzen. Im Gegenteil, Java-Objekte, die Ressourcen repräsentieren, haben alle eine dispose() oder close() Methode.
Auch in Java sollte eine Klasse niemals Logik im Destruktor ausführen. Der Java-GC ist da sogar noch schlechter geeignet als der Python-GC. Ersterer arbeitet überhaupt nicht deterministisch, es kann durchaus vorkommen, dass der gc während der Laufzeit eines Programms niemals abläuft. CPythons GC dagegen ist noch relativ deterministisch, weil er Objekte sofort abräumt, wenn der Refcount 0 erreicht. Wobei das natürlich ein Implementierungsdetail von CPython darstellt und weder IronPython noch iin Jython der Fall ist.
Ich bin mir nicht mal sicher, dass die JVM den Aufruf von finalize() garantiert.
@name
Die Doku sagt nur: "It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits. " Ich interpretiere das so, dass der Aufruf von __del__ garantiert wird, wenn ein Objekt während der Laufzeit gelöscht wird. Allerdings ist der Aufruf von __del__ trotzdem weiter nicht deterministisch, so dass sowohl Zeitpunkt als auch Umstände des Aufrufs nicht vorhersehbar sind.