2522
Комментарий:
|
2705
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
= Наследование и исключения = | = Наследование = |
Строка 46: | Строка 46: |
* `super()` '''TODO''' '''TODO''' https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ ? |
* `super()`: как всегда — объект-прокси всех методов родительских классов, в в случае множественного наследования аналогов не имеет (это как бы объект несуществующего класса) |
Наследование
Долги за прошлый раз:
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