python平等优先

python平等优先,python,equality,python-2.x,Python,Equality,Python 2.x,有了这段代码,左侧将获得比较的第一个镜头,如数据模型中所示: class L(object): def __eq__(self, other): print 'invoked L.__eq__' return False class R(object): def __eq__(self, other): print 'invoked R.__eq__' return False left = L() right

有了这段代码,左侧将获得比较的第一个镜头,如数据模型中所示:

class L(object):
    def __eq__(self, other):
        print 'invoked L.__eq__'
        return False

class R(object):
    def __eq__(self, other):
        print 'invoked R.__eq__'
        return False

left = L()
right = R()
但是如果我们对第6行稍作修改(其他内容都一样):

现在,右翼可以在比较中获得第一次机会

class R(L):

为什么呢?它记录在哪里?设计决策的原因是什么?

这记录在下一页的下一页中,并解释了它为什么以这种方式工作:

注意:如果右操作数的类型是左操作数类型的子类,并且该子类为操作提供反射方法,则将在左操作数的非反射方法之前调用此方法。此行为允许子类重写其祖先的操作

在您正在查看的部分中,还提到了:

如果操作数的类型不同,且右操作数的类型是左操作数类型的直接或间接子类,则右操作数的反射方法具有优先级,否则左操作数的方法具有优先级。不考虑虚拟子类化

class R(L):
>>> left == right
invoked R.__eq__
False