Sobes.tech
Back to questions
Junior — Middle
71

Какие функции должны быть реализованы в классе для его объекты могли использоваться как ключи в словаре?

Answer from AI

sobes.tech AI

Чтобы объекты класса могли использоваться как ключи в словаре Python, класс должен реализовать методы __hash__() и __eq__().

  • __hash__() должен возвращать хеш-значение объекта, которое не меняется в течение жизни объекта.
  • __eq__() должен определять логику сравнения объектов на равенство.

Важно, чтобы объекты, считающиеся равными (__eq__ возвращает True), имели одинаковый хеш.

Пример:

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

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