首页 > 后端开发 > Python教程 > 如何在 Python 中比较自定义类对象是否相等?

如何在 Python 中比较自定义类对象是否相等?

Susan Sarandon
发布: 2024-11-03 08:10:29
原创
391 人浏览过

How to Compare Custom Class Objects for Equality in Python?

通过属性比较对象是否相等

在 Python 中,使用相等运算符 (==) 比较两个对象并不总是产生结果当这些对象是自定义类的实例时的预期结果。为了解决这个问题,我们可以实现 eq 方法来为自定义类定义自定义相等行为。

考虑具有 foo 和 bar 属性的 MyClass 类:

<code class="python">class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar</code>
登录后复制

此类的两个实例 x 和 y 具有相同的属性值:

<code class="python">x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')</code>
登录后复制

但是,使用相等运算符比较它们会导致 False:

<code class="python">x == y</code>
登录后复制
登录后复制

要制作 Python考虑这些实例相等,我们实现 eq 方法:

<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):
            return NotImplemented
        return self.foo == other.foo and self.bar == other.bar</code>
登录后复制

现在,比较 x 和 y 返回 True:

<code class="python">x == y</code>
登录后复制
登录后复制

注意实现 eq 自动使我们的类的实例不可散列,从而防止它们存储在集合和字典中。如果我们的类建模不可变类型,我们还应该实现 hash 方法:

<code class="python">class MyClass:
    def __hash__(self):
        return hash((self.foo, self.bar))</code>
登录后复制

循环通过 dict 来比较值是不鼓励的,因为它不是真正通用的并且可能会遇到不可比较或不可散列的类型。 Python 2 用户可能需要实现 cmp 而不是 eq 并考虑实现 ne 来实现不平等行为。

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

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