Различия между версиями 8 и 9
Версия 8 от 2018-11-24 21:38:01
Размер: 2522
Редактор: FrBrGeorge
Комментарий:
Версия 9 от 2018-11-24 23:27:30
Размер: 2705
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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() — прокси-объект, аккумулирующий методы всех родительских классов (см. множественное наследование)

  • Защита полей от случайной перегрузки («__»)

Множественное наследование

  • Проблема ромбовидного наследования:
    • 1.1.png / 2.3.png

    • любой обход дерева доберётся до более глубокого метода
  • Что нужно:
    • Монотонность C: [C, …, B, …, A] ⇒ D(...(C)...): [D, …, C, …, B, …, A]
    • Соблюдение порядка объявления
      • ⇒ Некоторые ситуации невозможны (слишком симметричные)
      • TODO

  • MRO C3
  • super(): как всегда — объект-прокси всех методов родительских классов, в в случае множественного наследования аналогов не имеет (это как бы объект несуществующего класса)

Д/З

TODO

LecturesCMC/PythonIntro2018/10_Inheritance (последним исправлял пользователь FrBrGeorge 2018-11-28 01:21:53)