В документации Python упоминается, что если вы переопределяете __eq__
и объект неизменяемый, вы также должны переопределить __hash__
, чтобы класс был правильно хэшируемым.
На практике, когда я делаю это, я часто получаю код вроде
class MyClass(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __eq__(self, other):
if type(other) is type(self):
return (self.a == other.a) and (self.b == other.b)
else:
return False
def __hash__(self):
return hash((self.a, self.b))
Это несколько повторяется, и есть явный риск забыть обновить одно при обновлении другого.
Есть ли рекомендуемый способ реализации этих методов вместе?