для ключей в словорях и так далее?
>>> class A: ... def __eq__(self, rhs): ... return True ... >>> {A(): 2} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'A' как вариант
__hash__ = None А зачем так специфично?
Тогда уж False, а то побочный эффект сильно злобный. :-D
решил узнать, а для чего это могут применять?
а что у нас там по побочному эффекту будет?
False выглядит прям плохо.
Ну, все объекты будут равны чему угодно.
mypy ругается
а, я думал ты в None реплаишь. там суть в том, что переопределить dunder eq достаточно
Это проблемы mypy.
Ну, достаточно, но не необходимо. В этом случае хэш отвалится как побочный эффект. Но при этом разломается eq, что может быть нежелательно. Как вариант можно сделать __eq__ = object.__eq__ (или из родительского класса), но это опять же, работа с неявными эффектами. Если нужно сознательно сломать именно хэширование (фиг знает, зачем), то __hash__ = None выглядит как наиболее явное решение.
я думаю, что знать про связь между eq и hash нужно каждому. То есть ты должен понимать каждый раз, когда переопределяешь eq, что у тебя сломается hash
Обсуждают сегодня