我正在使用一些現有的代碼重新定義類的平等(通過__cmp__
方法)。它沒有按預期工作,並試圖解決它我遇到了一些我不明白的行爲。如果你在一個只調用內置函數cmp
的類上定義了__cmp__
,那麼我認爲它總是會達到最大遞歸深度。不過,如果你試圖將類的實例比較本身則返回0在python和遞歸中瞭解cmp
下面的代碼:
class A:
def __cmp__(self, other):
return cmp(self, other)
a = A()
b = A()
cmp(a, a) # returns 0
cmp(b, b) # returns 0
cmp(a, b) # results in RuntimeError: maximum recursion depth exceeded
的RuntimeError我理解,但我不明白爲什麼前兩個電話給cmp
成功。
我已閱讀了python文檔的data model部分以及其他諸如python equality的細分項,但無法找到此遞歸的答案。
而且,我知道這是一個完全沒有意義的課程。我正在使用的代碼嘗試在某些情況下重新定義相等性,否則將落入一個基本情況。 basecase不能正常工作,所以我試圖修復它。我想打電話cmp
可能會工作,並發現這個問題。我希望理解這將幫助我找到合適的解決方案。
我試過相同的代碼,但沒有得到任何錯誤 –
@AswinMurugesh - 你使用的是什麼版本的Python?我使用2.7.3 –
我也使用2.7.3 –