我需要设计一个支持某种不确定性(或者,如果需要的话,可以使用通配符)的对象。
该工作在Python中完成。
考虑以下课程
class C():
def __init__(self, p1):
self.p1 = p1
属性
p1
可以是“ x”,“ y”,“ z”,但有时可以是“ x或y”,或任何其他组合。如果
p1
的c1
是'x'并且p1
的c2
是'x或y',则c1 == c2
将返回True
。通过提供适当的__eq__
功能很容易实现。但是,这些对象也需要存储在集中,因此我需要提供一个
__hash__
函数。在这种情况下,如
c1 == c2
然后hash(c1) == hash(c2)
,您将如何计算哈希函数?选项1:对属性进行哈希处理
不好这就是为什么
c1 = C('x')
c2 = C('x or y or z')
c1 == c2 #True
hash(c1) == hash(c2)#False
最佳答案
您的平等标准不是可传递的,因此无效:
C('x') == C('x or y') == C('y')
但
C('x') != C('y')
由于您可以构造一个等于所有其他
C('x or y or z or a or ...')
的元素,因此唯一满足c1 == c2⇒hash(c1)== hash(c2)的哈希函数是一个常数。def __hash__(self):
return 0
关于python - 散列不确定对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6689935/