2012-05-25 2 views
0

SageObject에서 상속받은 Sage 클래스가 있습니다. 파이썬 문서에 따르면,Sage의 기본 __hash__ 메소드는 무엇입니까?

사용자 정의 클래스는 기본적으로 __cmp__()__hash__() 방법이있다; 그들과 함께 모든 개체가 동일하지 않은 경우 (자체를 제외하고) x.__hash__()id(x)을 반환합니다.

그러나 내 수업에서는 자체적으로 __hash__ 메서드를 구현하지 않지만이 작업을 수행하지 않습니다. 대신 문자열 표현의 해시 값 (__str__ 메서드에서 반환 된 값)을 사용합니다. Sage 클래스의 디자인의 일부입니까? 일반 Python 클래스와 다른 점이 있습니까? 현자가 받아 들일 수있는 해시 값을 찾기 위해 보일 수도있는 계층 구조가 있습니까?

답변

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 목록 중 하나에 대해 이것이 당신이 공헌에 관심이 있고 뭔가와 충돌 할 수 있다고 생각한 코드라면 묻는 것이 좋습니다.

관련 문제