[pyar] Operaciones sobre conjuntos y clases propias

Hernan Grecco hernan.grecco en gmail.com
Mar Oct 16 08:51:34 ART 2012


Hola Pablo,

> Tengo instancias de una clase propia (DF) que están dentro de un conjunto, y
> las operaciones como preguntar si dos conjuntos son disjuntos o el operador
> "in" no me funcionan. Supongo que es porque no puede comparar bien los
> elementos a pesar de que yo implementé en DF el método eq.

Seguramente no implementaste el metodo __hash__. No se requiere cuando
buscas eun elemento en una tupla (ahi se usa __eq__), pero si cuando
lo buscas en un set o un diccionario. Compara las clases A y B mas
abajo

>>> class A(object):
...  def __init__(self, value):
...   self.value = value
...  def __eq__(self, other):
...   return self.value == other.value
...  def __hash__(self):
...   return hash(self.value)

>>> A(1) in (A(1), A(2)) # busca en tupla
True

>>> A(1) in {A(1), A(2)} # busca en set
True

>>> class B(object):
...  def __init__(self, value):
...   self.value = value
...  def __eq__(self, other):
...   return self.value == other.value

>>> B(1) in (B(1), B(2))  # busca en tupla
True

>>> B(1) in {B(1), B(2)} # busca en set
False

-----

Un saludo,

Hernan



More information about the pyar mailing list