如果我在Python 2.7中定义一个对象如下:
class C(object):
def __eq__(self, other):
return object.__eq__(other)
平等按照人们的意愿行事:
In [2]: c = C()
In [3]: d = c
In [4]: d == c
Out[4]: True
In [5]: c == d
Out[5]: True
In [6]: C() == C()
Out[6]: False
但是,当我致电object.__eq__(other)
时,我根本没有通过self
,那么从哪里获取它?
答案 0 :(得分:3)
它无法访问self
,没有,只返回NotImplemented
单身:
>>> object.__eq__(None)
NotImplemented
因为object.__eq__
绑定到object
类型。只有object
本身,如果传入,将产生True
结果:
>>> object.__eq__(object)
True
它用于测试类是否相等,而不是实例。
除非您传递NotImplemented
:
object
>>> C().__eq__(None)
NotImplemented
>>> C().__eq__(object)
True
>>> C() == object
True
Python然后要求另一个对象进行相等性测试,如果它也返回NotImplemented
,则使用身份测试。
所以最后,你也可以删除__eq__
方法,因为它什么也没做,只是创造了一些额外的工作,什么都没有。 : - )