10.07.2015 Views

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

from gc import commonsense - Finish Him! 6from gc import commonsense - Finish Him!Autor: Claudio Freire>>> class ClaseInutil:... def __init__(self, valor):... self.valor = valor...>>> objetoInutil = ClaseInutil(3)>>> objetoInutil.valor3El mismo lector también recordará algo menos común en <strong>Python</strong>: los destructores. Losdestructores (así llamados en muchos lenguajes, pero toman otros nombres también) sonfunciones que se invocan para liberar recursos asociados a la instancia. Por ejemplo, sinuestra ClaseInutil tuviera como valor un archivo, un socket, o algo que necesite ser“cerrado” o “liberado”, vamos a querer implementar un destructor que lo haga cuando lainstancia deje de existir.No sé si todos, pero muchos de los que usamos python (y cualquier lenguaje de alto nivel,en realidad) nos sentimos atraídos por sus elegantes abstracciones. Y no es la menor laque abstrae el manejo de memoria, el garbage colector como se lo conoce.Este bicho tan ignorado pero reverenciado, dicen las historias, nos permite programar sinpreocuparnos por la memoria. No hace falta reservar memoria, no hace falta liberarla… elgarbage collector se encarga de eso.Y, como toda historia, tiene algo de verdad.En esta tira analizaremos los mitos y verdades del manejo de memoria automático. Muchode lo que veremos se aplica a muchos lenguajes a la vez - a todos los que utilicen algúntipo de manejo de memoria automático - pero, por supuesto, el foco es sobre el manejoque hace <strong>Python</strong>. Y no cualquier python, que hay varios.. C<strong>Python</strong>.FinalizaciónEscapando un rato de lo que es reservar y liberar bytes, porque antes de meternos en esosdetalles profundos y viscerales de C<strong>Python</strong> debemos conocer la superficie que los cubren,veamos un tema que tiene repercusiones serias en el manejo de memoria y de recursos engeneral.Si el lector ha programado en varios lenguajes orientados a objetos (no sólo python),conocerá de sobremanera los constructores. Pequeñas funcioncitas que, bueno, construyeninstancias de objetos de alguna clase particular.Por ejemplo:Esto se llama finalización, y en python se escribe:>>> class ClaseInutil:... def __init__(self, archivito):... print "abriendo"... self.valor = open(archivito, "r")... def __del__(self):... print "cerrando"... self.valor.close()...>>> objetoInutil = ClaseInutil("archivito.txt")abriendo>>> objetoInutil = NonecerrandoOtro lector dirá Hm… interesante. No lo voy a contradecir.Y sí, la clase se llama inútil porque los archivos en python ya tienen su destructor, quecierra el archivo. Pero es un ejemplo.Vida y obra de una claseAhora viene la pregunta que hay que hacerse. ¿Cuándo pues deja de existir una instancia?¿Cuándo se llama a __del__?En la mayoría de los lenguajes de alto nivel que administran la memoria por nosotros, ladefinición es muy laxa: en algún momento cuando no haya referencias alcanzables a lainstancia.<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!