[pyar] Problema con herencia.
QliX=D! [aka EHB]
qlixed en gmail.com
Sab Sep 17 18:47:00 ART 2011
Si, acabo de darme cuenta, se me habia pasado ese detalle :S
Gracias!
2011/9/17 Ariel Rossanigo <arielrossanigo en gmail.com>:
>
>
> El 17 de septiembre de 2011 17:50, QliX=D! [aka EHB] <qlixed en gmail.com>
> escribió:
>>
>> Estimados,
>> Tengo un inconveniente bastante particular y no logro dar con la
>> logica de por que me sucede.
>> Lo puedo solucionar implementando el esquema de otra forma, pero me
>> gustaria entender el problema y tratar de dejar la implementacion que
>> arme.
>>
>> Tengo la siguientes clases cortas:
>>
>> class Operation (object):
>> def __init__(self):
>> pass
>> def __repr__(self):
>> return self.__str__()
>> def do(self):
>> raise NotImplementedError()
>>
>>
>> class RelationalOperation(Operation):
>> __relations = []
>>
>> def __init__(self, *args):
>> for arg in args:
>> print "Added:" + str(arg)
>> self.__relations.append(arg)
>> def __str__(self):
>> return self.__class__.__name__ + " Between:" +
>> str(self.__relations)
>> @property
>> def relations(self):
>> return self.__relations
>>
>> class AddedRelation(RelationalOperation):
>> def __init__(self, aRelation):
>> super(AddedRelation, self).__init__(aRelation)
>> def __repr__(self):
>> return "<"+self.__class__.__name__ + ": " +
>> ",".join(self.relations)+">"
>> def __str__(self):
>> return self.__class__.__name__ + str(self.relations)
>>
>> Ahora, al momento de utilizarlas tengo el siguiente inconveniente:
>>
>> #....
>>
>> relations_stack.append(AddedRelation("hola"))
>>
>> #....
>>
>> try:
>> while (True):
>> sentences_stack.append(AddedRelation(relations_stack.pop()))
>> except IndexError:
>> pass
>>
>> print sentences_stack # [<AddedRelation: hola>]
>> #....
>>
>> relations_stack.append(AddedRelation("chau"))
>>
>> #....
>>
>> try:
>> while (True):
>> sentences_stack.append(AddedRelation(relations_stack.pop()))
>> except IndexError:
>> pass
>>
>> print sentences_stack # [<AddedRelation: hola, chau>, <AddedRelation:
>> hola, chau>]
>>
>> O sea, se me "updatea" el valor anterior con el nuevo mas el valor
>> nuevo agregado en la "pila".
>>
>> Que hice mal? en la definicion de clases?
>>
>
> El problema es que __relations es un atributo de clase, el cual es
> compartido por todas las instancias de esa clase. Como __relations es una
> lista y nunca le cambias su valor, todas las instancias hacen referencia a
> la misma lista.
> Una posible solución sería agregar al __init__ de RelationalOperation lo
> siguiente:
> ...
> self.__relations = []
>
> Saludos.
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
More information about the pyar
mailing list