python等于优先级

时间:2015-12-31 09:08:37

标签: python equality python-2.x

 lon_grid  = np.linspace(113.5,115.49,36)
 lat_grid  = np.linspace(37.40,38.78,30)

 lon_grid,lat_grid = np.linspace(xc1,xc2,36), np.linspace(yc1,yc2,30)
 for i in range(0,len(lon_grid),1):
     ax.axvline(x=lon_grid[i], linestyle='-', color='black', linewidth=0.75,    zorder=3)
 for i in range(0,len(lat_grid),1):
     ax.axhline(y=lat_grid[i], linestyle='-', color='black', linewidth=0.75, zorder=3)         

使用此代码,左侧获得比较的第一个镜头,在数据模型中为documented

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行稍作修改(其他一切都相同):

>>> left == right
invoked L.__eq__
False

现在右侧侧获得第一次比较。

class R(L):

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

1 个答案:

答案 0 :(得分:18)

这是在页面下方的numeric operations下记录的,并解释了为什么它以这种方式运作:

  

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

Python 3 documentation在您正在查看的部分中另外提到它:

  

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