2012-05-25 60 views
0

我有一個從SageObject繼承的Sage類。根據Python文檔,Sage中默認的__hash__方法是什麼?

默認情況下,用戶定義的類有__cmp__()__hash__()方法;與他們, 所有對象比較不等於(除自己)和x.__hash__()返回id(x)

但是,我的班級沒有這樣做,儘管它沒有實現自己的__hash__方法。相反,它使用其字符串表示形式的散列值(由其__str__方法返回的值)。這是Sage類設計的一部分,與普通Python類有所不同嗎? Sage爲了找到可接受的散列值可能會尋找哪些地方的層次結構?

回答

1

幸運的是,你實際上自己回答了這個問題。嘗試使用??技巧來查找源代碼。

sage: SageObject.__hash__?? 
Type:  wrapper_descriptor 
Base Class: <type 'wrapper_descriptor'> 
String Form: <slot wrapper '__hash__' of 'sage.structure.sage_object.SageObject' objects> 
Namespace: Interactive 
Definition: SageObject.__hash__(self) 
Source: 
    def __hash__(self): 
     return hash(self.__repr__()) 

所以是的,這是大多數這些事情的故意。如果你想實現一些不同的哈希,我想你可以。如果這是你有興趣貢獻的代碼,並且認爲它可能與某些內容發生衝突,那麼值得在其中一個Sage列表中詢問。

相關問題