Tu peux, car l'implémentation par défaut de __hash__
est suffisante, car elle se base sur id
, qui est unique par objet.
Ce qui explique le code suivant:
class Foo():
def __init__(self, bar):
self.bar = bar
f = Foo(1)
s = {f}
f.bar = 2
s.add(f) # ne fait rien, car f garde le même id, même après changement de valeur
assert len(s) == 1
Redéfinir le hash est utile pour les objets dont les instances ayant les même valeurs d'attributs sont considérées identiques:
class Foo:
def __init__(self, bar):
self.bar = bar
def __hash__(self):
return hash(self.bar)
def __eq__(self, othr):
return self.bar == othr.bar
assert len({Foo(1), Foo(1)}) == 1