Sobes.tech
Back to questions
Junior — Middle
57

Какова основная задача метода __hash__ в Python и зачем он необходим в рамках работы с объектами?

Companies where asked
Т-БанкТ-Банк
Атом Безопасность

Answer from AI

sobes.tech AI

Метод __hash__ в Python возвращает целочисленное значение (хэш) объекта, которое используется для быстрого сравнения и поиска объектов в хэш-таблицах, например, в множествах (set) и словарях (dict).

Основная задача __hash__ — обеспечить уникальный и неизменный идентификатор объекта во время его жизни, чтобы объекты можно было эффективно использовать как ключи в словарях или элементы множества.

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

Пример:

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

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

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

p1 = Point(1, 2)
p2 = Point(1, 2)

print(p1 == p2)  # True
print(hash(p1) == hash(p2))  # True

s = {p1}
print(p2 in s)  # True

Без корректного __hash__ объекты не смогут использоваться в множествах и словарях как ключи.