我正在Python 3中制作一个节点类,它将以最小顺序的多树结构存储。我覆盖了__eq__
方法,该方法通过比较两个唯一的整数实例变量来测试是否相等。
__hash__
吗?答案 0 :(得分:3)
是的,您必须覆盖__hash__
。
一般规则是:如果两个实例相等(写为__eq__
,即a==b
为True),则它们必须具有相同的哈希值。否则,各种各样的事情都可能发生错误行为。
此外,对我来说__eq__
不足以达到最低要求。至少,您需要定义__lt__
。
答案 1 :(得分:1)
我正在用Python 3制作一个节点类,它将以最小顺序的多树结构存储
如果这是唯一的用法,并且仅在内部使用,那么用户代码永远不会出现Node
,并且您的代码不会将它们存储在字典或集合中,也不会调用任何这样做,也许您可以不覆盖__hash__
而逃脱。
但是这些限制非常严格,无法真正执行。而且,不覆盖__hash__
与__eq__
保持一致没有任何好处。所以您仍然应该这样做。