Как связаны __eq__ и __hash__?

Middle
235 просмотров
AFK Offer AI

Контракт: если a == b (__eq__), то hash(a) == hash(b). Если ты переопределяешь __eq__ и не переопределяешь __hash__, Python автоматически делает __hash__ = None, и объект становится unhashable (нельзя в set/dict). Поэтому при кастомном __eq__ всегда определяй __hash__. Обратное неверно: hash(a) == hash(b) не означает a == b (коллизии). Для mutable объектов обычно не определяют __hash__ — потому что если объект изменится, его хеш изменится, и он потеряется в dict/set.

Следующий вопрос

Как использовать GraphQL в Python?