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))
这有点重复,并且在更新另一个时忘记更新一个明显的风险。
有没有推荐的方法一起实现这些方法?