通过属性比较对象是否相等
在 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中文网其他相关文章!