Sobes.tech
Back to questions
Junior — Middle
57

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

Companies where asked
OkkoOkko

Answer from AI

sobes.tech AI

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

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

Пример:

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

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

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

# Использование
points_dict = {}
pt1 = Point(1, 2)
pt2 = Point(1, 2)

points_dict[pt1] = "Точка A"
print(points_dict[pt2])  # Выведет "Точка A", так как pt1 == pt2 и хеш совпадает

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