如何自定义 Python 对象的相等比较?

DDD
发布: 2024-11-03 09:16:29
原创
215 人浏览过

How Can You Customize Equality Comparison for Python Objects?

Python 对象中的自定义相等性比较

Python 的默认行为将对象实例视为不同的实体,即使它们共享相同的属性也是如此。当您想要根据对象的内部属性而不是对象标识来比较对象时,此行为可能会出现问题。以下是如何自定义对象实例的相等性比较:

定义 eq 方法

控制如何比较自定义类的对象是否相等,在类定义中定义 eq 方法。该方法有两个参数:self 和 other。 self 参数指的是当前对象,而 other 表示要与之比较的对象。

<code class="python">class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

    def __eq__(self, other): 
        if not isinstance(other, MyClass):
            # Don't compare to unrelated types
            return NotImplemented

        return self.foo == other.foo and self.bar == other.bar</code>
登录后复制

通过实现 __eq__,您实际上是在为类的实例定义自定义相等性检查。在此示例中,该方法比较 self 和 other 的 foo 和 bar 属性,如果它们相等,则返回 True。

实现 eq

实现

eq 使类的实例不可散列。这意味着它们不能用作字典中的键或集合中的元素。这是因为Python依靠hash()函数来确定对象是否可散列,而对象的散列值是从其内部内容派生的。由于对象的内容可能会因属性分配而改变,因此无法可靠地对它们进行哈希处理。

如果您正在建模不可变类型,则还应该实现

hash 方法以确保一致以及在集合中使用时的可预测行为。

避免通用解决方案

尝试通过迭代

dict 并比较值来定义通用相等比较方法不推荐。如果对象的字典中包含不可比较或不可散列的类型,则此方法可能无法正确比较对象。

以上是如何自定义 Python 对象的相等比较?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板