Module (74%)
Section (57%)

Как Python находит свойства и методы: продолжение

Давайте проанализируем пример в редакторе.

Оба класса: Level1 и Level2 определяют метод с именем fun() и свойство с именем var. Означает ли это, что объект класса Level3 сможет получить доступ к двум копиям каждого объекта? Вовсе нет.

Объект, определенный позже (в смысле наследования), переопределяет тот же объект, определенный ранее. Вот почему код дает следующий вывод:

200 201

output

Как видите, переменная класса var и метод fun() из класса Level2 переопределяют объекты с одинаковыми именами, полученные из класса Level1.

Эту функцию можно намеренно использовать для изменения поведения классов по умолчанию (или ранее определенного), когда любой из его классов должен действовать не так, как его предок.

Можно также сказать, что Python ищет объекты снизу вверх и полностью удовлетворен первым объектом с желаемым именем.

Как это работает, когда у класса есть два предка, предлагающих один и тот же объект, и они лежат на одном уровне? Другими словами, что Вы должны ожидать, когда класс появляется с использованием множественного наследования? Давайте посмотрим на это.



Code

class Level1:
var = 100
def fun(self):
return 101


class Level2(Level1):
var = 200
def fun(self):
return 201


class Level3(Level2):
pass


obj = Level3()

print(obj.var, obj.fun())
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×