The python documentation,如果您覆盖__eq__
且对象是不可变的,则还应覆盖__hash__
in为了使课程适当可以使用。
在实践中,当我这样做时,我经常会得到像
这样的代码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))
这有点重复,当另一个更新时,很有可能忘记更新一个。
是否有推荐的方法一起实施这些方法?
答案 0 :(得分:2)
回答我自己的问题。似乎执行此操作的一种方法是定义辅助__members
函数,并在定义__hash__
和__eq__
时使用它。这样就没有重复:
class MyClass(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __members(self):
return (self.a, self.b)
def __eq__(self, other):
if type(other) is type(self):
return self.__members() == other.__members()
else:
return False
def __hash__(self):
return hash(self.__members())
答案 1 :(得分:0)
这相当于这个单行eq吗?
def __eq__(self, other):
return type(other) is type(self) and (self.a == other.a) and (self.b == other.b)