2014-04-25 33 views
2

當我使用默認散列方法時,爲什麼我會得到「return self.__hash__() RuntimeError:超過最大遞歸深度」?RuntimeError:使用默認散列方法超出最大遞歸深度

This causes the error: 

def __hash__(self): 
    return self.__hash__() 

This works: 

def __hash__(self): 
    return self.name.__hash__() 
+2

你認爲'def a():a()'會做什麼? –

+2

認真嗎?因爲當你調用'instance .__ hash __()'時,你可以調用調用'instance .__ hash __()'的實例.__ hash __()',調用'instance .__ hash __()'調用'instance .__ hash __()實例.__哈希__()'哪個調用'實例.__哈希__()'哪... – jonrsharpe

回答

3

當然要從自身陷入無限遞歸調用方法:

def method_name(self): 
    return self.method_name() 

你可能想調用基類的方法?

def __hash__(self): 
    return super(ClassName, self).__hash__() 
+0

謝謝,它來自一個問題集中的一個類,我確實這是原因,但想要驗證,而且你確實感謝再次。 –

相關問題