在Python中对自定义类执行集合操作

47 投票
1 回答
30337 浏览
提问于 2025-04-16 16:14

我想用Python自带的集合类来处理我自己创建的一个类。如果我想创建包含我这个自定义类实例的集合,我需要实现哪些函数,才能进行像set_a - set_b这样的操作呢?

1 个回答

58

这个东西开箱就能用,不过有时候你可能需要重写一下 __eq____ne____hash__ 这几个方法。默认情况下,__eq__ 是用来比较对象是否是同一个东西,这可能不是你想要的。如果是这种情况,你需要确保相等的对象有相同的哈希值,而理想情况下,不相等的对象应该有不同的哈希值(虽然这不是必须的,但这样可以减少冲突)。你应该总是用 __eq__ 来实现 __ne__,除非你有特别的理由不这样做(这样做是为了确保逻辑上的一致性)。

另外,当你重写 __hash__ 的时候,要注意在对象存储在 set 中时,它的哈希值不能改变。

撰写回答