반응형
여러 속성이있는 클래스를 구현할 때 (아래의 장난감 예제와 같이) 해싱을 처리하는 가장 좋은 방법은 무엇입니까?
__ eq __
와 __ hash __
는 일관성이 있어야한다고 생각하지만 모든 속성을 처리 할 수있는 적절한 해시 함수를 구현하는 방법은 무엇입니까?
class AClass:
def __init__(self):
self.a = None
self.b = None
def __eq__(self, other):
return other and self.a == other.a and self.b == other.b
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash((self.a, self.b))
해결 방법
__ hash __
는 동일한 객체에 대해 동일한 값을 반환해야합니다. 또한 객체의 수명 동안 변경되어서는 안됩니다. 일반적으로 불변 객체에 대해서만 구현합니다.
간단한 구현은 0을 반환
하는 것입니다. 이것은 항상 정확하지만 성능이 좋지 않습니다.
속성 튜플의 해시를 반환하는 솔루션이 좋습니다. 그러나 튜플의 __ eq __
에서 비교하는 모든 속성을 나열 할 필요는 없습니다. 일부 속성이 일반적으로 같지 않은 객체에 대해 동일한 값을 갖는 경우에는 그대로 두십시오. 해시 계산을 필요한 것보다 더 비싸게 만들지 마십시오.
참조 페이지 https://stackoverflow.com/questions/4005318
반응형
'파이썬' 카테고리의 다른 글
파이썬 PySpark에서 스크립트를 실행하는 방법 (0) | 2020.10.28 |
---|---|
파이썬 numpy에서 요소 별 행렬 곱셈 (아다 마르 곱)을 얻는 방법은 무엇입니까? (0) | 2020.10.28 |
파이썬 AttributeError : 'str'개체에 'append'속성이 없습니다. (0) | 2020.10.28 |
파이썬 팬더는 groupby의 평균을 얻습니다 (0) | 2020.10.28 |
파이썬 Python에서 동일한 그래프에 목록 목록 그리기 (0) | 2020.10.28 |
댓글