Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: hash, eq

Какие методы должны быть реализованы в классе, чтобы его экземпляры можно было использовать как ключи словаря?

Вопрос проверяет знание протокола сравнения и хэширования пользовательских объектов.

Короткий ответ

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

Длинный ответ

Для использования объектов в качестве ключей словаря Python требует соблюдения контракта хэширования.

Какие методы нужны

Минимально необходимо реализовать:

  1. __eq__(self, other) — определяет равенство объектов.

  2. __hash__(self) — возвращает целое значение хэша.

Пример:

class User:
    def __init__(self, user_id):
        self.user_id = user_id

    def __eq__(self, other):
        return isinstance(other, User) and self.user_id == other.user_id

    def __hash__(self):
        return hash(self.user_id)

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

d = {User(1): "Alice"}

Важный контракт

Должно выполняться правило:

if a == b:
    hash(a) == hash(b)

Если это правило нарушается, словари и множества начинают работать некорректно.

Особенность Python

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

Вывод

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#hash

#eq

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.