Sobes.tech
Back to questions
Junior — Middle
75

Каким образом обеспечить возможность использования экземпляров вашего класса в качестве ключей в словаре?

Answer from AI

sobes.tech AI

Чтобы экземпляры вашего класса в 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.