ООП 19 Магические методы __eq__ и __hash__. Dunder methods в Python

YOUTUBE · 01.12.2025 09:47

Ключевые темы и таймкоды

Введение

0:00
  • Приветствие от Артёма Егорова.
  • Обсуждение магических методов в Python.
  • Фокус на методах `__eq__` и `__hash__`.

Создание класса и объектов

0:25
  • Определение пустого класса `Point`.
  • Создание экземпляра класса `p1`.
  • Проверка, что `p1` является объектом.

Сравнение объектов

1:20
  • Сравнение объектов по их ID.
  • Необходимость сравнения по координатам `x` и `y`.
  • Создание метода `__eq__` для сравнения по координатам.

Метод `__hash__`

2:17
  • Объяснение метода `__hash__` как одностороннего преобразования объекта в числовое значение.
  • Демонстрация работы метода `__hash__` на примере `p2`.

Переопределение метода `__eq__`

3:17
  • Переопределение метода `__eq__` для сравнения по координатам.
  • Создание нового экземпляра `p4`.
  • Ошибка при попытке получить хэш после переопределения `__eq__`.

Использование `__hash__` в Python

5:18
  • Объяснение, что `__hash__` доступен только для неизменяемых объектов.
  • Примеры неизменяемых объектов: числа, строки.
  • Невозможность использования изменяемых объектов, таких как списки, в качестве ключей словаря.

Переопределение класса для использования в словарях

6:11
  • Переопределение класса `Point` для поддержки `__hash__`.
  • Возврат значения `__hash__` от кортежа с координатами `x` и `y`.
  • Проверка работы переопределённого класса.

Заключение

8:12
  • Подведение итогов обсуждения магических методов.
  • Призыв задавать вопросы в комментариях.
  • Прощание.