我創建一個雙向鏈表結構,因與兩個節點是否相等比較的一些問題。該結構相當複雜,它具有多個屬性,包括名稱,行,列,右,左,上和下。如果兩個節點相等,他們必須同意所有這些屬性。我知道在我EQ方法我可以簡單地硬編碼檢查每個屬性與其他的,但我覺得那裏會做一個更簡單的方法,發現工作的大部分時間的一種方式。因此,我有以下幾點:確定兩個字典相等的Python錯誤
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,但除了這兩項解決方案,其他的東西,將不勝感激,
做一些調試:在'__eq__'方法的'return'之前使用'print vars(self)','print vars(other)'。或者你可以直接去'import pdb; 'return'語句之前的pdb.set_trace()'。 – 2012-07-13 18:09:54