0

我有一个从 SageObject 继承的 Sage 类。根据 Python 文档,

用户定义的类默认有__cmp__()__hash__()方法;与它们一起,所有对象都比较不相等(除了它们自己)并x.__hash__()返回id(x)

然而,我的类并没有这样做,尽管它没有实现__hash__自己的方法。相反,它使用其字符串表示的哈希值(由其__str__方法返回的那个)。这部分 Sage 类的设计与普通的 Python 类有什么不同吗?为了找到可接受的哈希值,Sage 是否有可能查看位置的层次结构?

4

1 回答 1

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 列表之一上询问。

于 2012-05-26T02:17:24.737 回答