Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2014, 16:24
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Objeto miembro de una lista.

Buen día a todos.

Tengo un problema con un código en python 3.
Me explico.

Tengo una clase:
Código:
class LRItem(object):

    def __init__(self):
        self.rule = None
        self.dot = 0
        self.lookAhead = ''

    def __eq__(self, other):
        return self.__dict__ == other.__dict__

    def show(self):
        if self.rule is None:
            print("Empty LR(1) item")
        text = self.rule.leftHand.text
        text += " -> "
        for tokens in self.rule.rightHands[:self.dot]:
            text += ' ' + tokens.text
        text += ' .'
        for tokens in self.rule.rightHands[self.dot:]:
            text += ' ' + tokens.text

        text += ' ||' + self.lookAhead
        print(text)
Como se puede observar, uso __eq__ para hacer comparaciones de igualdad. No se que tan correcto sea esto.

Dentro de una función tengo una lista donde voy agregando objetos de la clase especificada.
El problema es que llega un momento en que hago lo siguiente:
Código:
itemsList = []
.
.
for la in lookAheads:
    newItem.lookAhead = la
    if newItem not in itemsList:
        itemsList.append(newItem)
.
.
lookAheads es una lista de strings.
Por cada objeto string en la lista cambio mi objeto tipo LRItem, es decir, newItem.
Después intento agregar ese nuevo item a mi lista de objetos.

Lo curioso es que aunque noItem.lookAhead contenga un valor diferente, ya no me agrega el nuevo item a la lista. Parece ser que la condución
Código:
newItem not in itemsList:
falla de alguna manera.

Alguien me podría explicar que sucede? O que estor haciendo mal?
Por que el operador in no esta dando el resultado correcto??

Saludos