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