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

Posted

技术标签:

【中文标题】在python中对自定义类执行集合操作【英文标题】:performing set operations on custom classes in python 【发布时间】:2011-04-22 10:16:40 【问题描述】:

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

【问题讨论】:

也在这里:***.com/questions/17493307/… 【参考方案1】:

它可以开箱即用,但是,在某些情况下,重载 __eq____ne____hash__ 是有意义的。默认情况下,__eq__ 将比较对象身份。这可能不是你想要的。在这种情况下,您必须注意相等的对象具有相等的哈希值,并且理想情况下,不相等的对象具有不同的哈希值(尽管这不是必需的,它只是减少了冲突)。您应该始终使用__eq__ 实现__ne__,除非您有特定的理由不这样做(这样做是为了确保逻辑一致性)。

另外,当重载__hash__ 时,您必须注意当对象存储在set 中时哈希值不会改变。

【讨论】:

谢谢,@Space_C0wb0y。关于 eqhash 的一点是我需要知道的。 @Danny:很高兴为您提供帮助。如果某个答案解决了您的问题,您可以使用左侧的勾号接受它。 你没有说如何实现 hash 这是这里的关键部分。如何准确实施?其次,当您创建类时,您很少(我以前从未这样做过!)创建 eqne 函数。不需要!那为什么要另外写呢?

以上是关于在python中对自定义类执行集合操作的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法或包我们可以在 django 中对自定义原始 sql 查询执行过滤器(搜索)?

如何在 prestashop 1.7 中对自定义页面进行 ajax 请求

如何在 Delphi 2009 中对自定义组件进行鼠标平移

无法在 Drupal 7 的视图中对自定义字段进行排序或过滤

如何使用 NSKeyedArchiver 对自定义类进行编码和解码

对自定义类列表进行排序<T>