Ver Mensaje Individual
  #7 (permalink)  
Antiguo 13/03/2014, 19:22
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Objeto miembro de una lista.

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 original
  1. class LRItem(object):
  2.  
  3.     def __init__(self):
  4.         self.rule = None
  5.         self.dot = 0
  6.         self.lookAhead = ''
  7.  
  8.     def __eq__(self, other):
  9.         return self.__dict__ == other.__dict__
  10.  
  11.     def __str__(self):
  12.         return self.lookAhead
  13.  
  14.     def __repr__(self):
  15.         return '"%s"' % self.__str__()
  16.  
  17.  
  18. lookAheads = ['a', 'b', 'c', 'd', 'a', 'd', 'c']
  19. itemsList = []
  20. newItem = LRItem()
  21. for la in lookAheads:
  22.     newItem.lookAhead = la
  23.     if newItem not in itemsList:
  24.         itemsList.append(newItem)
  25. print(itemsList)

Cuando tu querias:
Código Python:
Ver original
  1. class LRItem(object):
  2.  
  3.     def __init__(self):
  4.         self.rule = None
  5.         self.dot = 0
  6.         self.lookAhead = ''
  7.  
  8.     def __eq__(self, other):
  9.         return self.__dict__ == other.__dict__
  10.  
  11.     def __str__(self):
  12.         return self.lookAhead
  13.  
  14.     def __repr__(self):
  15.         return '"%s"' % self.__str__()
  16.  
  17.  
  18. lookAheads = ['a', 'b', 'c', 'd', 'a', 'd', 'c']
  19. itemsList = []
  20. for la in lookAheads:
  21.     newItem = LRItem()
  22.     newItem.lookAhead = la
  23.     if newItem not in itemsList:
  24.         itemsList.append(newItem)
  25. 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.