Sobes.tech
Junior — Middle
89

Bir sınıfın örneklerinin sözlük anahtarı olarak kullanılabilmesi için hangi özelliklere ve metodlara sahip olması gerekir?

Sorulan şirketler
БАРС группБАРС групп

AI'dan gelen yanıt

sobes.tech yapay zeka

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

  1. Класс должен реализовывать метод __hash__(), возвращающий целочисленный хеш объекта.
  2. Класс должен реализовывать метод __eq__(self, other), чтобы корректно сравнивать объекты на равенство.
  3. Объекты должны быть неизменяемыми (или по крайней мере, хеш и равенство не должны меняться в течение жизни объекта), иначе поведение словаря будет некорректным.

Пример:

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", т.к. p1 == p2 и хеши совпадают

Таким образом, для использования в качестве ключа словаря важно корректно определить __eq__ и __hash__.