Sobes.tech
Back to questions
Junior — Middle
75

Объясните, что такое объект, который можно хешировать, и какие особенности он должен иметь?

Companies where asked
Effective Mobile

Answer from AI

sobes.tech AI

Объект, который можно хешировать в Python, — это объект, для которого определён метод __hash__(), возвращающий целочисленное значение (хеш). Такой объект должен быть неизменяемым (immutable), чтобы его хеш оставался постоянным на протяжении жизни объекта.

Особенности хешируемого объекта:

  • Неизменяемость: поля объекта не должны изменяться, иначе хеш станет некорректным.
  • Реализация __hash__: метод должен возвращать целочисленное значение.
  • Реализация __eq__: объекты, равные по __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))

p = Point(1, 2)
print(hash(p))

Такой объект можно использовать в качестве ключа словаря или элемента множества.