Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpMgHs 92 of 174 menu
◀ ▶

Метод __hash__ в ООП в Python

Объекты с переопределенным методом __eq__ нельзя положить в множество, пока у класса нет метода __hash__. Множество в Python задают литералом {...} или функцией set.

Пусть у нас есть класс User с методом __eq__:

class User: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): if not isinstance(other, User): return False return self.name == other.name and self.age == other.age

Попытка создать множество из таких объектов выдаст ошибку. Добавим метод __hash__ на основе тех же полей, что и в __eq__:

class User: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): if not isinstance(other, User): return False return self.name == other.name and self.age == other.age def __hash__(self): return hash((self.name, self.age))

Проверим:

user1 = User('john', 25) user2 = User('john', 25) users = {user1, user2} print(len(users)) # выведет 1

Сделайте класс Employee с именем и зарплатой. Реализуйте __eq__ и __hash__, чтобы объекты можно было хранить в множестве.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить