Sobes.tech
Junior — Middle
108

Comment garantir que les instances de votre classe puissent être utilisées comme clés dans un dictionnaire?

Réponse de l'IA

sobes.tech IA

Чтобы экземпляры вашего класса в Python можно было использовать в качестве ключей в словаре, они должны быть хешируемыми. Для этого нужно:

  1. Реализовать метод __hash__(), который возвращает целочисленное значение хеша.
  2. Реализовать метод __eq__(), чтобы корректно сравнивать объекты на равенство.

Важно, чтобы объекты были неизменяемыми по полям, участвующим в вычислении хеша, иначе словарь может работать некорректно.

Пример:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __eq__(self, other):
        if not isinstance(other, Point):
            return False
        return self.x == other.x and self.y == other.y

    def __hash__(self):
        return hash((self.x, self.y))

p1 = Point(1, 2)
p2 = Point(1, 2)

my_dict = {p1: "A point"}
print(my_dict[p2])  # Выведет: A point

В этом примере два объекта с одинаковыми координатами считаются равными и имеют одинаковый хеш, поэтому p2 можно использовать для доступа к значению в словаре, где ключом был p1.