我正在创建一个双链接结构,并且在比较两个节点是否相等时遇到了一些问题。该结构相当复杂,因为它具有多个属性,包括名称、行、列、右、左、上和下。如果两个节点相等,它们必须就所有这些属性达成一致。我知道在我的eq方法中,我可以简单地硬编码检查每个属性与另一个属性,但我认为会有一种更简单的方法来做到这一点,并找到了一种在大多数情况下都有效的方法。因此,我有以下内容:
def __init__ (self,row,col,name=None,up=None,down=None,left=None,right=None):
self.name = name
self.row = row
self.col = col
self.up = up
self.down = down
self.left = left
self.right = right
def __eq__ (self, other):
return vars(self) == vars(other)
以及对此并不重要的各种其他方法。所以我确定是否两个节点的捷径基本上是查看它们变量的字典,然后让 python 比较两个字典的等价性。
这很好用!只要两个节点实际上相等。它返回 True,然后我继续愉快地使用我的代码。但是如果两个节点实际上不相等,它就会分崩离析。我明白了
File "*filename*", line 35 in __eq__ return vars(self) == vars(self)
在屏幕上写了无数次,直到它最终说
RuntimeError: maximum recursion depth exceeded
我知道有一些方法可以解决这个问题,即我可以显式检查每个属性,但这很糟糕,我想知道为什么这不起作用,以及是否可以轻松修复。我已经用其他更简单的字典测试了这种方法并且它有效,所以我的想法是这个问题与确定对象是否相等有关,但我不知道我可以在这里做什么。我意识到我也可以只做一个错误捕获然后让它返回 False 但除了这两个解决方案之外的其他解决方案将不胜感激,