Bueno chavo, por favor trata de darnos un código que podamos correr porque esta difícil andar adivinando de donde sale looksAhead, newItem u otras variables que vayan saliendo.
Si estas reusando el objeto newItem, obviamente vas a tener problemas porque, tu objeto es mutable y ademas siempre es una referencia al mismo objeto.
Asumi que estabas haciendo esto
Código Python:
Ver originalclass LRItem(object):
def __init__(self):
self.rule = None
self.dot = 0
self.lookAhead = ''
def __eq__(self, other):
return self.__dict__ == other.__dict__
def __str__(self):
return self.lookAhead
def __repr__(self):
return '"%s"' % self.__str__()
lookAheads = ['a', 'b', 'c', 'd', 'a', 'd', 'c']
itemsList = []
newItem = LRItem()
for la in lookAheads:
newItem.lookAhead = la
if newItem not in itemsList:
itemsList.append(newItem)
print(itemsList)
Cuando tu querias:
Código Python:
Ver originalclass LRItem(object):
def __init__(self):
self.rule = None
self.dot = 0
self.lookAhead = ''
def __eq__(self, other):
return self.__dict__ == other.__dict__
def __str__(self):
return self.lookAhead
def __repr__(self):
return '"%s"' % self.__str__()
lookAheads = ['a', 'b', 'c', 'd', 'a', 'd', 'c']
itemsList = []
for la in lookAheads:
newItem = LRItem()
newItem.lookAhead = la
if newItem not in itemsList:
itemsList.append(newItem)
print(itemsList)
Para la construcción de una clase sencilla como la que tienes al menos deberías de plantearte los siguientes puntos: ¿Es mutable o inmutable el objeto? Definir algún tipo de ID o ID compuesto (Que atributos harán a este objeto único). Saber al menos de referencias a objetos. Trata de trabajar con métodos como __str__ en lugar de métodos como show.