Exercices Architecture & Patterns Protocole __hash__ et __eq__
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Protocole __hash__ et __eq__

En Python, pour mettre un objet dans un set ou l'utiliser comme clé de dictionnaire, il doit etre hashable. Cela veut dire qu'il doit avoir une méthode __hash__ qui retourne un entier.

Mais il y a une regle importante : si tu definis __eq__ sur ta classe, Python desactive automatiquement __hash__. Tu dois donc definir les deux ensemble.

La regle d'or : si a == b, alors hash(a) == hash(b). L'inverse n'est pas forcement vrai (deux objets differents peuvent avoir le meme hash).

Pour calculer un hash a partir de plusieurs valeurs, utilise hash() sur un tuple :
hash((self.x, self.y))

Crée une classe Point avec x et y. Implemente __eq__ (egalite si x et y identiques) et __hash__ (base sur le tuple x, y).

Exemple :
p1 = Point(1, 2)
p2 = Point(1, 2)
p3 = Point(3, 4)
p1 == p2 # True
len({p1, p2, p3}) # 2 (le set deduplique)

Tests (2/4)

Egalite
assert Point(1, 2) == Point(1, 2)
Inegalite
assert Point(1, 2) != Point(3, 4)

+ 0 tests cachés

Indices (3 disponibles)

solution.py