다음과 같은 파이썬 클래스가 있다고 가정 해 봅시다 (문제는 Java와 equals
and와 동일합니다 hashCode
)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
여기서 degrees
float로서 켈빈 온도이다. 지금, 나는 평등 테스트 및 해싱을 구현하고자하는 Temperature
방법한다는 점에서
- 직접 평등 테스트 대신 엡실론 차이까지 플로트를 비교합니다.
- 을
a == b
암시 하는 계약을 존중합니다hash(a) == hash(b)
.
def __eq__(self, other):
return abs(self.degrees - other.degrees) < EPSILON
def __hash__(self):
return # What goes here?
파이썬 문서는 해싱 숫자 에 대해 조금 이야기 hash(2) == hash(2.0)
하지만 이것이 같은 문제는 아닙니다.
내가 올바른 길을 가고 있습니까? 그렇다면이 상황에서 해싱을 구현하는 표준 방법은 무엇입니까?
업데이트 : 지금은 수레를 테스트 평등이 유형의 이행 성을 제거 이해 ==
하고 equals
. 그러나 이것이 어떻게 수레를 직접 비교해서는 안되는 "공통 지식"과 함께 진행됩니까? float를 비교하여 항등 연산자를 구현하면 정적 분석 도구가 불평합니다. 그들은 그렇게 할 권리가 있습니까?
kelvin
?