Каков метод __hash__ по умолчанию в Sage?
У меня есть класс Sage, который наследуется от SageObject. Согласно документации Python,
Пользовательские классы имеют
__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__())
Так что да, это намеренно для большинства из этих вещей. Если вы хотите реализовать что-то другое для хэшей, я думаю, вы могли бы. Стоит спросить в одном из списков мудрецов, был ли это код, который вы хотели бы внести и думали, что он может конфликтовать с чем-то.