/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Lections/Lesson10/3-Inheritance/task_inheritance_6.py
52 строки
2 KB
Ivan-Khabarov
Добавлен урок 11
29 сен 2024, 13:44
29 сен 2024, 13:44
833c32c
Код
Авторство
О чём код?
# Вызов метода __init__ остановился на классе B. Мы не дописали ему вызов super, # считая что он и так не имеет наследников. В результате аргумент data_a не был # создан в экземпляре класса z. Попробуем описать классу A дополнительный метод. class A: def __init__(self): print('Init class A') self.data_a = 'A' class B: def __init__(self): print('Init class B') self.data_b = 'B' class C: def __init__(self): print('Init class C') self.data_c = 'C' class D: def __init__(self): print('Init class D') self.data_d = 'D' class X1(A,C): def __init__(self): print('Init class X1') super().__init__() class X2(B,D): def __init__(self): print('Init class X2') super().__init__() class X3(A, D): def __init__(self): print('Init class X3') super().__init__() class Z(X1, X2, X3): def __init__(self): print('Init class Z') super().__init__() print(*Z.mro(), sep='\n') z = Z() print(f'{z.data_b = }') print(f'{z.data_a = }') # AttributeError: 'Z' object has no attribute 'data_a' # Вызов метода __init__ остановился на классе B. Мы не дописали ему вызов super, # считая что он и так не имеет наследников. В результате аргумент data_a не был # создан в экземпляре класса z. Попробуем описать классу A дополнительный метод.