[pyar] Primeros pasos POO: destruyendo objetos

Luis Andraschnik luis.andraschnik en gmail.com
Mar Feb 13 13:48:35 ART 2018


Hola Marcos y Federico!

Entonces tengo que hacer el trabajo sucio yo mismo, como mucho puedo poner
el clon a dormir.
Ahora decido matarlo:

a = Persona('Luis', 49)
print(a.nombre, a.edad, a.poblacion)

b = Persona('Clon', 25)
print(b.nombre, b.edad, b.poblacion)

print('Hasta la vista baby ....')
del b
print(a.nombre, a.edad, a.poblacion)
print(b.nombre, b.edad, b.poblacion)

y la salida es:

Luis 49 1
Clon 25 2
Hasta la vista baby ....
Luis 49 2
Traceback (most recent call last):
  File "clases.py", line 21, in <module>
    print(b.nombre, b.edad, b.poblacion)
NameError: name 'b' is not defined

Por lo que ven, como es de esperar, el objeto es borrado pero mi variable
de clase queda desactualizada indicando la pobación como 2, cuando ya maté
al clon. Tendría que invocar primero al método morir() y luego del:

b.morir()
del b



El 13 de febrero de 2018, 13:06, Marcos Dione <mdione en grulic.org.ar>
escribió:

> On Tue, Feb 13, 2018 at 12:45:34PM -0300, Luis Andraschnik wrote:
> > Porqué no funciona esto? Creo un clon de mi persona (más joven) y lo
> mato,
> > pero parece indestructible ...
>
>     eso te pasa por jugar con genetica :-P
>
> > class Persona():
> >     poblacion=0
> >     def __init__(self, nombre, edad):
> >         self.nombre = nombre
> >         self.edad = edad
> >         Persona.poblacion += 1
> >
> >     def morir(self):
> >         Persona.poblacion -= 1
> >         del self
> >
> > b = Persona('Clon', 25)
> > print(b.nombre, b.edad, b.poblacion)
> >
> > b.morir()
> >
> > Por qué el objeto b sigue existiendo?
>
>     porque cuando hacés 'del self', 'b' aún tiene una referencia al
> objeto, así que su refcount > 0. entonces, no sólo el objeto no es
> destruído, eso te permite poder seguir referenciándolo usando el nombre
> 'b'.
>
>     tengo la impresión de que 'del self' jamás tendrá ningún impacto más
> allá de que no podés volver a usar 'self' en el método desde esa línea en
> adelante. eso es porque cuando estás en el método, en realidad lo has
> llamado usando alguna otra referencia, aunque más no sea una entrada en
> una list o diccionario o algo por el estilo.
>
> --
> (Not so) Random fortune:
> The technology industry sees itself as in rebellion against corporate
> America: not corrupt, not buttoned-up, not empty. In fact, a tech company
> can be as corrupt, soulless, and empty as any corporation, but being
> unprofessional helps us maintain the belief that we are somehow different
> from Wall Street.
>             -- Shanley Kane
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180213/2d083165/attachment.html>


Más información sobre la lista de distribución pyar