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()
С этим кодом левая сторона получает первый снимок при сравнении, как документально в модели данных:
>>> left == right
invoked L.__eq__
False
Но если мы сделаем небольшую модификацию на строке 6 (все остальное одно и то же):
class R(L):
Теперь правая сторона получает первый выстрел при сравнении.
>>> left == right
invoked R.__eq__
False
Почему? Где это задокументировано, и в чем причина дизайнерского решения?