Sobes.tech
Back to questions
Junior — Middle
79

Какие специальные методы в Python позволяют управлять поведением объектов при работе с хэшированием?

Companies where asked
Т-БанкТ-Банк
Баланс-ПлатформаБаланс-Платформа

Answer from AI

sobes.tech AI

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

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

  • __eq__(self, other) — определяет логику сравнения объектов на равенство. Важно, чтобы объекты, которые считаются равными (__eq__ возвращает True), имели одинаковый хэш (__hash__).

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

Пример:

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))

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

print(hash(p1), hash(p2))  # одинаковые хэши
print(p1 == p2)  # True

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

Таким образом, для корректной работы с хэшированием нужно реализовать оба метода, учитывая их взаимосвязь.