2012-07-30 2 views
0

파이썬에서는 특정 데이터를 기반으로 동등성을 유지해야하는 클래스에 대해 평등과 해시를 재정의해야하는 경우가 자주 있습니다. 나는 보통 이것을 이와 같은 수퍼 클래스로 추상화하지만, 파이썬에 이와 비슷한 것이 있는지 궁금해하고 있습니다. 일반적인 작업처럼 보입니다.python valuetype hash mixin

class ValueType(object): 
    def __init__(self, *args, **kwargs): super(ValueType, self).__init__(*args, **kwargs) 
    def __eq__(self, other): return self._key() == other._key() 
    def __ne__(self, other): return self._key() != other._key() 
    def __hash__(self): return hash(self._key())  
+0

정확히 원하는지는 모르지만 [total_ordering] (http://docs.python.org/library/functools)을 살펴볼 가치가 있습니다. .html # functools.total_ordering) –

+0

불행히도, 수업에는 총 주문이 없습니다. – Antimony

답변

0

답변은 필자가 아는 한 (파이썬을 사용하여 2 년을 기준으로)하지만 거의 증명할 수 없습니다.

실제적으로, 내가 갖고있는 것처럼 ABC를 사용할 지 확신하지 못합니다. 믹스 인으로 사용하는 것이 더 의미가 있습니다. 을 깨끗하게 제거 할 수 있습니다. 파이썬은 믹스 틴을 명시 적으로 지원하지 않지만 다중 상속을 지원하므로 구현하기가 쉽지 않습니다. 계약이 있다고 가정하면 Python MRO (Method Resolution Order)를 찾아보고 클래스를 올바르게 주문해야합니다. (이 경우 ValueTypeobject 이전이어야합니다.)