Наследование и исключения
Долги за прошлый раз:
hasattr() и getattr()
__iter__()
__del__()
Наследование
Объектное планирование и ООП
ООП:
Характеристика |
Python3 |
Инкапсуляция (не сокрытие) |
Иерархия пространств имён |
Наследование |
Наследование + C3 MRO |
Полиморфизм |
«Из коробки», т. к. duck typing |
Проксирование?
Хранить родительский объект в виде поля, а все методы нового класса делать обёрткой вокруг методов родительского объекта.
TODO пример
Простое наследование
- Видимость и перегрузка методов
- Преобразование типов и создание новых объектов текущего типа:
type(self)(…)
super()
Защита полей от случайной перегрузки («__»)
Множественное наследование
- Проблема ромбовидного наследования:
/
- любой обход дерева доберётся до борее глубокого метода
- Что нужно:
- Монотонность C: [C, …, B, …, A] ⇒ D(...(C)...): [D, …, C, …, B, …, A]
- Соблюдение порядка объявления
- ⇒ Некоторые ситуации невозможны (слишком симметричные)
- MRO C3
TODO https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ ?
Д/З
TODO