Как 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())