Objetos Anidados (lista de objetos)

Arnau Sanchez arnau en ehas.org
Mar Nov 6 13:41:21 CET 2007


Daniel escribió:

> class persona:
>     nombre=""
>     direccion=""
>     hijos=[]

Este es un error típico. En la clase sólo debes definir valores 
constantes, ya que todas las instancias comparten esos datos (por eso te 
dice que hay 4 hijos).

Los valores que difieren en cada instancia se inicializan en el método 
__init__.

> padre=persona()
> padre.nombre="carlos"
> hijo1=persona()
> hijo1.nombre="pedro"
> hijo2=persona()
> hijo2.nombre="marta"
> padre.AsignarHIjos(hijo1)
> padre.AsignarHIjos(hijo2)
> nieto1=persona()
> nieto1.nombre="juan"
> nieto2=persona()
> nieto2.nombre="sandra"
> hijo1.AsignarHIjos(nieto1)
> hijo1.AsignarHIjos(nieto2)

Cuestiones de estilo: a) NombreDeUnaClase b) Métodos en imperativos: 
hazEsto() o haz_esto() c) Espacios entre las asignaciones.

Podría quedar así:

class Persona:
     def __init__(self, nombre, direccion=""):
         self.nombre = nombre
         self.direccion = direccion
         self.hijos = []

     def asignaHijos(self, hijo):
         self.hijos.append(hijo)

padre = Persona("carlos")

hijo1 = Persona("pedro")
hijo2 = Persona("marta")
padre.asignaHijos(hijo1)
padre.asignaHijos(hijo2)

nieto1 = Persona("juan")
nieto2 = Persona("sandra")
hijo1.asignaHijos(nieto1)
hijo1.asignaHijos(nieto2)

print len(padre.hijos)
print len(hijo1.hijos)

Y así sí te da 2 y 2.

Ver:

http://almacen.gulic.org/diveintopython-5.4-es/object_oriented_framework/index.html
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es