пятница, 31 июля 2015 г.

Строковое представление объектов: __repr__ и __str__

Встроенные функции print и str (а также её внутренний эквивалент, который используется функцией print) сначала пытается использовать метод __str__. Вообще, этот метод должен возвращать строковое представление в удобном для пользователя виде.

Во всех остальных случаях используется метод __repr__: функцией автоматического вывода в интерактивной оболочке, функциями print и str, когда в классе отсутствует метод __str__. Вообще этот метод должен возвращать строку, которая могла бы использоваться как программный код для восстановления объекта или содержать информацию, полезную для разработчиков.

четверг, 30 июля 2015 г.

Протокол управления контекстом

Схема работы инструкции with:
  1. Производится вычисление выражения, возвращающего объект, известный как менеджер контекста, который должен иметь методы __enter__ и __exit__.
  2. Вызывается метод __enter__ менеджера контекста. Возвращаемое значение метода присваивается переменной в предложении as, если оно имеется, в противном случае значение просто уничтожается.
  3. Затем выполняется блок программного кода, вложенный в инструкцию with.
  4. Если при выполнении блока возбуждается исключение, вызывается метод __exit__(тип, значение, диагностическая информация), которому передается подробная информация об исключении. Если этот метод возвращает ложное значение, исключение возбуждается повторно, в противном случае исключение деактивируется. Обычно исключение следует возбуждать повторно, чтобы оно могло выйти за пределы инструкции with.
  5. Если в блоке with исключение не возникает, метод __exit__ все равно вызывается, но в аргументах тип, значение, и диагностическая информация ему передается значение None.
GitHub
Источник: Лутц М. Изучаем Python, 4-е издание. — Пер. с англ. — СПб.: Символ-Плюс, 2011, стр. 950.

Общие методы перегрузки операторов

Наиболее часто используемые методы перегрузки операторов.