[pyar] Primeros pasos POO: destruyendo objetos

Luis Andraschnik luis.andraschnik en gmail.com
Mar Feb 13 16:59:56 ART 2018


Hola Marcos!

En realidad hay una sola clase , Persona. Población no es una clase sino
una variable de clase, compartida por todas las instancias de persona. Por
eso la quería usar para mantener en forma automática el número de
pobladores. Cada vez que creo uno o elimino uno (siempre que use el método
morir() ...), todo va bien salvo que el objeto en cuestión no muere para
nada y queda en memoria ...

En fin no es para resolver ningún problema particular sino para aprender
POO que hasta ahora le vengo escapando, ya que cada vez que veo código con
clases me da fobia ...

Saludos
L:uis
.

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

> On Tue, Feb 13, 2018 at 01:48:35PM -0300, Luis Andraschnik wrote:
> > 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
>
>     Lo que pasa es que la clase Población hace demasiadas cosas: por un
> lado, cada instancia representa una Persona (guiño guiño), y por otro, a
> nivel de clase cuenta la cantidad de Personas en una Población (guiño
> guiño)².
>
>     Uno de los aspectos de Python para cierto tipos de cosas es
> reutilizar los tipos que ya vienen con el lenguaje. Yo implementaría
> Persona como tenés Población ahora, salvo por la parte de contar gente, y
> Población ni siquiera me haría una clase, sino que usaría un set(), al
> cual le podés pedir un len() si necesitás saber su tamaño (cuántas
> Personas hay). Todo esto, claro, asumiendo que Población no hace más que
> contar Personas, y que tenes/implementás una forma de saber si una
> instancia de Persona es igual o no a otra (pensá en DNI, y en implementar
> __eq__()). Ya después depende mucho del problema que realmente estés
> resolviendo.
>
> --
> (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/8b2dd280/attachment.html>


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