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



