Module (75%)
Section (61%)

Как 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())
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×