Booklet A4/A5 - PET: Python Entre Todos - Python Argentina
Booklet A4/A5 - PET: Python Entre Todos - Python Argentina
Booklet A4/A5 - PET: Python Entre Todos - Python Argentina
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Finalizando 55<br />
2 La primera es la forma recomendada y es la que seguramente<br />
elegirás, salvo que andes decorando clases en <strong>Python</strong> < 2.6<br />
<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar<br />
14 Referencias circulares<br />
cómodo, hay que admitir, así que si vamos a apoyarnos en esta comodidad, hagámoslo<br />
a conciencia, sabiendo lo que hacemos, y las limitaciones que tiene:<br />
Referencias circulares<br />
Nuestra clase inútil utiliza un destructor para cerrar el archivo… cosa que se considera<br />
incorrecta en <strong>Python</strong>. ¿Por qué, tanta gente se pregunta.<br />
Veamos:<br />
>>> objetoInutil = ClaseInutil("archivito.txt")<br />
abriendo<br />
>>> objetoInutil2 = ClaseInutil("archivito.txt")<br />
abriendo<br />
>>> objetoInutil.circulito = objetoInutil2<br />
>>> objetoInutil2.circulito = objetoInutil<br />
>>> objetoInutil = objetoInutil2 = None<br />
Ahora, ejercicio interesante para el lector pensar qué saldrá por la consola luego de<br />
esa última sentencia. No es poco común equivocarse aquí, y decir: imprime “cerrando”<br />
dos veces. No, no lo hace. Adelante, hagan la prueba.<br />
Para entender qué sucede, tipear en la consola import gc ; gc.garbage. Ahí están<br />
nuestras dos instancias de ClaseInutil.<br />
¿Qué sucedió Lo veremos en detalle en otra entrega. Lo importante para recordar es<br />
que los destructores se llevan muy mal con las referencias circulares. Y hay muchas,<br />
muchas formas de caer en referencias circulares, y no siempre son sencillas de<br />
detectar, y siempre son más difíciles aún de evitar. gc.garbage va a ser nuestro amigo<br />
siempre que sospechemos de este tipo de problemas.<br />
Resucitando objetos<br />
Las personas no son las únicas que pueden recibir CPR (resucitación cardiopulmonar).<br />
Los objetos en python también. Realmente, a mí personalmente, nunca me fue útil para<br />
nada. Nada de nada de nada. Pero alguien debe haber pensado que estaba bueno,<br />
porque es parte del lenguaje:<br />
Si un destructor de una instancia, en el proceso, crea una referencia alcanzable a sí<br />
mismo, la destrucción se cancela, y el objeto vive.<br />
Capaz que puede servir para depuración, o para hacer cosas locas. Imaginemos que un<br />
recurso lo tengo que destruir sí o sí en el thread principal (no es descabellado, sucede<br />
<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar