我想将Python的内置集合类与我创建的自定义类一起使用。如果我想 要创建包含我的自定义类实例的集合,我需要实现哪些函数才能执行测试,例如set_a - set_b?
答案 0 :(得分:29)
它可以开箱即用,但是,有可能出现重载__eq__
,__ne__
和__hash__
的情况。默认情况下,__eq__
将比较对象标识。这可能不是你想要的。在这种情况下,你必须注意相等的对象具有相等的哈希值,理想情况下,不相等的对象具有不同的哈希值(虽然这不是必需的,但它只是减少了冲突)。您应始终使用__ne__
实施__eq__
,除非您有特殊原因要做其他事情(这样做是为了确保逻辑一致性)。
此外,当重载__hash__
时,您必须注意在对象存储在set
时散列不会更改。
答案 1 :(得分:-5)
如果您想支持-
的{{1}}操作,可以执行以下操作:
class
执行#!/usr/bin/python
class Test(object):
def __init__(self, val):
self.val = val
def __sub__(self, y):
return Test(self.val - y.val)
x = Test(10) - Test(5)
print x.val
操作时会调用 __sub__
。