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