【发布时间】:2017-07-20 13:26:42
【问题描述】:
在阅读有关如何在 python 中实现 __eq__ 时,例如在 this SO question 中,您会得到类似的建议
class A(object):
def __init__(self, a, b):
self._a = a
self._b = b
def __eq__(self, other):
return (self._a, self._b) == (other._a, other._b)
现在,我在将其与继承结合时遇到了问题。具体来说,如果我定义一个新类
class B(A):
def new_method(self):
return self._a + self._b
然后我得到这个问题
>>> a = A(1, 2)
>>> b = B(1, 2)
>>> a == b
True
但很明显,a 和 b 并不是(完全)相同的!
用继承实现__eq__的正确方法是什么?
【问题讨论】:
-
你如何定义平等?
type是平等测试的重要组成部分吗,例如1 == True是True但显然它们不是同一类型。从a的角度来看,b不等于a。您可以为b、a == b实现不同的相等性,但这并不意味着b == a。
标签: python inheritance equality