在python中对自定义类执行set操作

时间:2011-04-22 10:16:41

标签: python set

我想将Python的内置集合类与我创建的自定义类一起使用。如果我想 要创建包含我的自定义类实例的集合,我需要实现哪些函数才能执行测试,例如set_a - set_b?

2 个答案:

答案 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__