Module (71%)
Section (48%)

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

Теперь можно сформулировать общее утверждение, описывающее поведение Python.

Когда Вы пытаетесь получить доступ к любым компонентам объекта, Python попытается (в следующем порядке):

  • найти его внутри самого объекта;
  • найти его во всех классах, участвующих в линии наследования объекта снизу вверх.

Если вышеперечисленные попытки не удались, возникает исключение (AttributeError).


Первое условие может потребовать дополнительного внимания. Как Вы знаете, все объекты, производные от определенного класса, могут иметь разные наборы атрибутов, и некоторые атрибуты могут быть добавлены к объекту спустя долгое время после создания объекта.

Пример в редакторе суммирует это в трехуровневой линии наследования. Проанализируйте это внимательно.

Все комментарии, которые мы сделали до сих пор, относятся к одиночному наследованию, когда подкласс имеет ровно один суперкласс. Это наиболее распространенная ситуация (и рекомендуемая тоже).

Python, однако, предлагает гораздо больше здесь. В следующих уроках мы покажем Вам несколько примеров множественного наследования.



Code

class Level1:
variable_1 = 100
def __init__(self):
self.var_1 = 101

def fun_1(self):
return 102


class Level2(Level1):
variable_2 = 200
def __init__(self):
super().__init__()
self.var_2 = 201

def fun_2(self):
return 202


class Level3(Level2):
variable_3 = 300
def __init__(self):
super().__init__()
self.var_3 = 301

def fun_3(self):
return 302


obj = Level3()

print(obj.variable_1, obj.var_1, obj.fun_1())
print(obj.variable_2, obj.var_2, obj.fun_2())
print(obj.variable_3, obj.var_3, obj.fun_3())
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×