A prima vista, sembra che il metodo speciale Python __del__
offra gli stessi vantaggi di un distruttore in C++. Ma secondo la documentazione di Python (https://docs.python.org/3.4/reference/datamodel.html), c'è non c'è nessuna garanzia che il metodo __del__
del tuo oggetto venga mai chiamato!RAII in Python: qual è il punto di __del__?
Non è garantito che i metodi
__del__
() vengano chiamati per oggetti che esistono ancora quando l'interprete esce.
Quindi, in altre parole, il metodo è inutile! Non è vero? Una funzione di hook che può o non può essere chiamata in realtà non fa molto bene, quindi __del__
non offre nulla per quanto riguarda RAII. Se ho un po 'di pulizia essenziale, non ho bisogno di eseguire alcune volte, oh, quando mai il GC sembra davvero, ho bisogno di eseguire in modo affidabile, deterministico e al 100% del tempo.
So che Python fornisce i gestori di contesto, che sono molto più utili per tale compito, ma perché è stato mantenuto il __del__
? Qual e il punto?
Non capisco davvero cosa stai chiedendo esattamente. La tua domanda "È' __del__' essenzialmente inutile? "? (Credo che sia la tua domanda) In questo caso credo che dovresti * chiarire * la questione rimuovendo tutti i riferimenti a C++ o RAII, che sono completamente estranei. Se la tua domanda è "Come implementare RAII in Python? Posso usare" __del__ "per questo?" allora probabilmente devi cambiare un sacco di cose nella tua domanda. – Bakuriu
@Bakuriu Il nocciolo della questione è, qual è esattamente il punto di "_del__"? Qualcuno può nominare un caso d'uso realistico per il metodo? – antred