Auf den ersten Blick scheint es so, als ob Pythons __del__
spezielle Methode die gleichen Vorteile bietet, die ein Destruktor in C++ hat. Aber laut der Python-Dokumentation (https://docs.python.org/3.4/reference/datamodel.html) gibt es keine Garantie, dass die Methode Ihres Objekts __del__
jemals überhaupt aufgerufen wird!RAII in Python: Was ist der Sinn von __del__?
Es ist nicht garantiert, dass
__del__
() -Methoden für Objekte aufgerufen werden, die beim Beenden des Interpreters noch vorhanden sind.
Mit anderen Worten, die Methode ist nutzlos! Ist es nicht? Eine Hook-Funktion, die aufgerufen werden kann oder nicht, hilft nicht wirklich, also bietet __del__
nichts in Bezug auf RAII. Wenn ich einige wesentliche Aufräumarbeiten habe, brauche ich es nicht einige Zeit, oh, wenn jemals der GC fühlt es wirklich, ich brauche es zuverlässig, deterministisch und 100% der Zeit laufen.
Ich weiß, dass Python bietet Kontext-Manager, die für diese Aufgabe viel nützlicher sind, aber warum wurde __del__
überhaupt gehalten? Was ist der Punkt?
Ich verstehe nicht wirklich, wonach genau Sie fragen. Ist Ihre Frage "Ist' __del__' im Wesentlichen nutzlos? "? (Ich glaube, es ist Ihre Frage) In diesem Fall glaube ich, dass Sie die Frage klären würden, indem Sie alle Verweise auf C++ oder RAII entfernen, die völlig unabhängig sind. Wenn Ihre Frage lautet: "Wie implementiere ich RAII in Python? Darf ich dafür' __del__' verwenden? " dann musst du wahrscheinlich eine Menge Dinge in deiner Frage ändern. – Bakuriu
@Bakuriu Der Kern der Sache ist, was genau ist der Sinn von'__del__'? Kann jemand einen realistischen Anwendungsfall für die Methode nennen? – antred