Problemas con el __del__

Hernan Foffani hernan en orgmf.com.ar
Lun Feb 9 20:28:13 CET 2004


Pablo Barrera González escribio:
> Quiero que cuando se cierre el programa y un objeto de clase MiClase
> muera se cierre la conexión como dios manda. El problema es que nunca
> veo esa cadena de texto, ni aunque haga del miobjeto. La única forma
> es miobjeto.__del__().

Es algo mas complejo que eso.
El problema .__del__(self) se ejecuta cuando el reference count llega
a cero.  del miobjeto lo que hace es descontar uno a la referencia y
quitar la asociacion entre el nombre 'miobjeto' y el objeto propiamente
dicho.  pero lo segundo no implica directamente lo primero!
dependerá si miobjeto tiene referencias circulares y o referencias a
objetos de contexto etc.
Haz la prueba con una clase muy simple y verás que el llamado a
__del__ a veces queda "retrasado"

Hay mas detalles en la doc de __del__ y del modulo gc.

> ¿No debería ejecutarse el destructor al final del script al cerrarse
> el interprete?

¿Y si tienes distintos objetos (por ejemplo, conexiones y graficos) en
qué orden llamaría al __del__?
Ten en cuenta que python puede ser embebido y extendido.

saludos,
-H.




Más información sobre la lista de distribución Python-es