Различия между версиями 2 и 3
Версия 2 от 2018-11-23 17:41:25
Размер: 4640
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2018-11-23 17:42:05
Размер: 4671
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
Долги за прошлый раз:
Строка 3: Строка 4:
Долги за прошлый раз:
Строка 12: Строка 12:
|| '''Характеристика''' || '''Python3''' ||
|| Инкапсуляция ('''не''' сокрытие) || Иерархия пространств имён ||
|| Наследование || Наследование + C3 MRO ||
|| Полиморфизм || «Из коробки», т. к. duck typing ||
||'''Характеристика''' ||'''Python3''' ||
||Инкапсуляция ('''не''' сокрытие) ||Иерархия пространств имён ||
||Наследование ||Наследование + C3 MRO ||
||Полиморфизм ||«Из коробки», т. к. duck typing ||


Строка 28: Строка 31:
Строка 30: Строка 34:
  * {{attachment:1.1.png}) / {{attachment:2.3.png}}   * {{attachment:1.1.png}) / {{attachment:2.3.png|1.1.png}) / {{attachment:2.3.png}}
Строка 36: Строка 40:
   *     *
Строка 42: Строка 46:
'''TODO'''
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ ?
'''TODO''' https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ ?
Строка 50: Строка 54:
Строка 57: Строка 62:
Оператор `raise` 
Оператор `raise`
Строка 60: Строка 67:

Строка 66: Строка 71:
Строка 84: Строка 90:
    except Exc1:      except Exc1:
Строка 86: Строка 92:
    except Exc2:      except Exc2:
Строка 88: Строка 94:
    except ZeroDivisionError:      except ZeroDivisionError:
Строка 92: Строка 98:
Исключения порождаются в разных местах, а обрабатываются в одном:
Строка 93: Строка 100:
Исключения порождаются в разных местах, а обрабатываются в одном:
Строка 99: Строка 105:

Наследование и исключения

Долги за прошлый раз:

  • hasattr() и getattr()

  • __iter__()

  • __del__()

Наследование

Объектное планирование и ООП

ООП:

Характеристика

Python3

Инкапсуляция (не сокрытие)

Иерархия пространств имён

Наследование

Наследование + C3 MRO

Полиморфизм

«Из коробки», т. к. duck typing

Проксирование?

Хранить родительский объект в виде поля, а все методы нового класса делать обёрткой вокруг методов родительского объекта.

TODO пример

Простое наследование

  • Видимость и перегрузка методов
  • Преобразование типов и создание новых объектов текущего типа:
    • type(self)(…)

    • super()

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

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

TODO https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ ?

Исключения

Исключения – это механизм управления вычислительным потоком, который завязан на разнесении по коду проверки свойств данных и обработки результатов этой проверки.

Синтаксическая ошибка SyntaxError — не обрабатывается (ещё такие ошибки?)

Оператор try:

  • Клауза except

    • Вариант except Исключение

      • Исключения — объекты Python3 (унаследованы от BaseException)

      • Дерево исключений, перехват всех дочерних
    • Вариант except Исключение as идентификатор, произвольные параметры исключения

  • Клауза else: — если исключений не было

  • Клауза finally: — выполняется даже если исключение не перехвачено

Оператор raise

  • Собственные исключения (унаследованиы от Exception, а не BaseException — некоторые исключения перехватывать не стоит)

  • вариант raise Exception vs. raise Exception(параметры) — по идее Exception — это класс, а Exception() — объект, но на самом деле при выхове исключения всё равно изготавливается объект

Исключения — не «ошибки», а способ обработки некоторых условий не так, где они были обнаружены.

Пример:

   1 class Exc1(Exception): pass
   2 class Exc2(Exception): pass
   3 
   4 def funerr(a,b):
   5     if a<b:
   6         raise Exc1("A must be greater than B")
   7     return a//b
   8 
   9 def justfun(a,b):
  10     if a<b:
  11         raise Exc2("A must be greater than B")
  12     c = funerr(2*a, 3*b)
  13     return c
  14 
  15 for a,b in (10,3),(5,5),(10,0):
  16     try:
  17         c = justfun(a,b)
  18     except Exc1:
  19         c = -1
  20     except Exc2:
  21         c = -2
  22     except ZeroDivisionError:
  23         c = -3
  24     print(c)

Исключения порождаются в разных местах, а обрабатываются в одном:

2
-1
-3

Д/З

TODO

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