[pyar] Primeros pasos POO: destruyendo objetos

Marcos Dione mdione en grulic.org.ar
Mar Feb 13 15:53:40 ART 2018


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


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