假设我们有以下Python类(Java中存在的问题与equals
和相同hashCode
)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
degrees
开尔文的温度在哪里?现在,我想实现平等的测试和哈希为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?
Python文档讨论了一些关于确保数字哈希hash(2) == hash(2.0)
的问题,但这并不是完全相同的问题。
我是否在正确的轨道上?如果是这样,在这种情况下实现散列的标准方法是什么?
更新:现在我知道这种浮点数相等性测试消除了==
和的可传递性equals
。但是,如何将其与浮动的“常识”一起使用,不应该直接进行比较?如果通过比较浮点数实现相等运算符,则静态分析工具会抱怨。他们这样做正确吗?
kelvin
?