我有一个继承自SageObject的Sage类。根据Python文档,
默认情况下,用户定义的类具有
__cmp__()
和__hash__()
方法;跟他们, 所有对象都比较不相等(除了自己),x.__hash__()
返回id(x)
。
但是,尽管它没有实现自己的__hash__
方法,但是我的类没有这样做。相反,它使用其字符串表示形式的哈希值(由__str__
方法返回的哈希值)。这是Sage类设计的一部分,与普通的Python类不同吗?为了找到可接受的哈希值,是否存在Sage可能看起来的层次结构?
答案 0 :(得分: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列表中询问。