Quando si implementa una classe con proprietà multiple (come nell'esempio di esempio di seguito), qual è il modo migliore per gestire l'hashing?Come implementare una buona funzione __hash__ in python
Immagino che il __eq__
e il __hash__
debbano essere coerenti, ma come implementare una funzione di hash corretta in grado di gestire tutte le proprietà?
class AClass:
def __init__(self):
self.a = None
self.b = None
def __eq__(self, other):
return other and self.a == other.a and self.b == other.b
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash((self.a, self.b))
ho letto su this question che tuple sono hashable, quindi mi chiedevo se qualcosa di simile l'esempio precedente era ragionevole. È?
Assicurati di usare 'hash()' su una tupla con esattamente gli elementi che vengono confrontati in '__eq __()' e gli amici (esattamente come hai fatto tu) e sei a posto. – Feuermurmel
Definito duplicato di [Qual è un modo corretto e valido per implementare \ _ \ _ hash \ _ \ _()?] (Http://stackoverflow.com/questions/2909106/whats-a-correct-and-good-way- to-implement-hash) –