potencia - listas python
realizar operaciones de conjunto en clases personalizadas en python (2)
Si desea admitir -
operación para su class
, puede hacer algo como esto:
#!/usr/bin/python
class Test(object):
def __init__(self, val):
self.val = val
def __sub__(self, y):
return Test(self.val - y.val)
x = Test(10) - Test(5)
print x.val
__sub__
se __sub__
cuando se realiza la operación.
Me gustaría usar la clase de conjunto incorporada de Python con una clase personalizada que he creado. Si quiero crear conjuntos que contengan instancias de mi clase personalizada, ¿qué funciones debo implementar para poder realizar pruebas, como set_a - set_b?
Funcionará de la caja, sin embargo, puede haber casos, cuando tiene sentido sobrecargar __eq__
, __ne__
y __hash__
. Por defecto, __eq__
se comparará para la identidad del objeto. Esto podría no ser lo que quieres. En ese caso, debe tener cuidado de que el objeto igual tenga valores hash iguales, e, idealmente, el objeto no igual tenga hashes diferentes (aunque esto no es necesario, simplemente reduce las colisiones). Siempre debe implementar __ne__
utilizando __eq__
, a menos que tenga un motivo específico para hacerlo de otra manera (esto se hace para garantizar la consistencia lógica).
Además, al sobrecargar __hash__
, debe tener cuidado de que el hash no cambie mientras el objeto está almacenado en un set
.