[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