我有一个带有__hash__
函数的类定义,该函数使用对象属性创建一个唯一键,以便在python集中进行比较。
哈希方法如下所示:
def __hash__(self):
return int('%d%s'%(self.id,self.create_key))
在负责实现此类的模块中,运行了几个可以构造此类的重复实例的查询,并且在负责执行此操作的函数中创建的队列表示为一个集合以确保dupes可以省略:
in_set = set()
out_set = set()
for inid in inids:
ps = Perceptron.getwherelinked(inid,self.in_ents)
for p in ps:
in_set.add(p)
for poolid in poolids:
ps = Perceptron.getwherelinked(poolid,self.out_ents)
for p in ps:
out_set.add(p)
return in_set.union(out_set)
(不知道为什么缩进在这里被破坏了)
不知何故,尽管调用union
方法,我仍然得到两个重复的实例。打印出来时(在Perceptron类中使用 str 方法只调用 hash ),两个哈希值相同,理论上应该不可能。
set([1630, 1630])
任何指导都将不胜感激。
答案 0 :(得分:4)
答案 1 :(得分:1)
您还需要实施__eq__()
以匹配您的__hash__()
实施。