Sobes.tech
Junior — Middle
108

Welche Funktionen müssen in der Klasse implementiert werden, damit ihre Objekte als Schlüssel in einem Wörterbuch verwendet werden können?

Antwort von AI

sobes.tech KI

Чтобы объекты класса могли использоваться как ключи в словаре 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.