Tengo un problema con un código en python 3.
Me explico.
Tengo una clase:
Código:
Como se puede observar, uso __eq__ para hacer comparaciones de igualdad. No se que tan correcto sea esto.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)
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:
lookAheads es una lista de strings.itemsList = [] . . for la in lookAheads: newItem.lookAhead = la if newItem not in itemsList: itemsList.append(newItem) . .
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:
falla de alguna manera.newItem not in itemsList:
Alguien me podría explicar que sucede? O que estor haciendo mal?
Por que el operador in no esta dando el resultado correcto??
Saludos