Problemas con el __del__

luis miguel morillas morillas en posta.unizar.es
Lun Feb 9 23:57:06 CET 2004


	Asunto: [Python-es] Problemas con el __del__
	Fecha: lun, feb 09, 2004 at 07:32:55 +0100


Citando a  Pablo Barrera González (barrera en gsyc.escet.urjc.es):
> Hola
> 
> Tengo un problema bastante raro que me ha hecho cuestionarme mi
> conocimiento sobre las clases en Python. Tengo una clase para realizar
> comunicaciones a través de un socket con un servidor. La clase es esta:
> 
> class MiClase:
>     def __init__(self):
>         soc = socket.socket()
>         host = socket.gethostbyname("bla")
>         port = 3001
>         soc.connect((host, port))
>         self.soc = soc
>         print "Conectado con ", host
> 
>     def __del__(self):
>         self.soc.send("1000\n")
>         self.soc.close()
>         print "Conexion cerrada como dios manda"
> 
>     def resto_de_metodos(self):
> 	pass
> 
> 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__().
> 
> ¿No debería ejecutarse el destructor al final del script al cerrarse el
> interprete?
>
La idea está bien. Hernán te ha especificado algunas pegas de __del__
en python (aquí las tienes ampliadas [1]). Pero además hay autores
(Magnus Lie Hetland en Practical Python) que recomiendan evitar el
uso de __del__ porque tú no controlas cuándo se va a destruir el objeto
muchas veces.

Lo que quieres hacer (cerrar de forma limpia las conexiones)
suelo hacerlo gestionando las excepciones try/except o try/finally



[1] http://www.faqs.org/faqs/python-faq/part1/ (apartado 4.17)

-- 

Luis Miguel

No a las patentes de software en Europa
EuropeSwPatentFree
http://EuropeSwPatentFree.hispalinux.es




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