Как Python находит свойства и методы: продолжение
Давайте посмотрим на пример в редакторе.
Класс Sub наследует признаки от двух суперклассов, Left и Right (эти имена имеют смысл).
Нет сомнений, что переменная класса varRight происходит из класса Right, а varLeft происходит от Left соответственно.
Это понятно. Но откуда взялся var? Можно ли это угадать? Та же проблема встречается с методом fun() - будет ли он вызываться из Left или из Right? Давайте запустим программу - ее вывод:
L LL RR Left
output
Это доказывает, что оба неясных случая имеют решение внутри класса Left. Достаточно ли этого, чтобы сформулировать общее правило? Да, это так.
Можно сказать, что Python ищет компоненты объекта в следующем порядке:
- внутри самого объекта;
- в его суперклассах, снизу вверх;
- если в конкретном пути наследования находится несколько классов, Python сканирует их слева направо.
Вам нужно что-нибудь еще? Просто внесите небольшую поправку в код - замените: class Sub (Left, Right): на: class Sub (Right, Left):, затем снова запустите программу, и посмотрите, что получится.
Что Вы видите сейчас? Вы должны увидеть:
R LL RR Right
output
Вы видите то же самое или что-то другое?
Code
class Left:var = "L"
var_left = "LL"
def fun(self):
return "Left"
class Right:
var = "R"
var_right = "RR"
def fun(self):
return "Right"
class Sub(Left, Right):
pass
obj = Sub()
print(obj.var, obj.var_left, obj.var_right, obj.fun())