对象.__ eq__如何访问调用它的方法范围?

时间:2015-07-24 19:48:10

标签: python python-2.7

如果我在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,那么从哪里获取它?

1 个答案:

答案 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__方法,因为它什么也没做,只是创造了一些额外的工作,什么都没有。 : - )