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