Перейти к содержанию

Паттерны проектирования в Python

Начало урока

Паттерны проектирования в Python

Классические паттерны, переписанные по-питонически: модули, функции первого класса и протоколы

Главная идея: Паттерн проектирования - это именованное, многоразовое решение повторяющейся задачи проектирования. Знаменитый каталог "Банды четырёх" был написан для статических языков вроде C++ и Java. Python более динамичен: функции - это объекты, модули - кэшированные синглтоны, а утиная типизация означает, что иерархия интерфейсов почти не нужна. Поэтому в Python большинство паттернов становятся легче - а некоторые почти исчезают.
К концу вы сможете:
  • объяснить, почему модуль Python уже является синглтоном;
  • заменить иерархию классов-фабрик словарём-реестром вызываемых объектов;
  • реализовать паттерн Стратегия, просто передав функцию;
  • построить Наблюдателя на основе списка функций-подписчиков;
  • использовать typing.Protocol для структурной типизации вместо ABC.

1. Что такое паттерн - и особенность Python

Паттерн - это не библиотека и не возможность языка; это форма решения, которая снова и снова повторяется. Названия этих форм дают команде общий словарь: сказать "давайте используем здесь Стратегию" - значит передать целый замысел в двух словах.

Подвох в том, что многие учебные паттерны существуют, чтобы обходить ограничения статических языков, где есть только классы. В таких языках нельзя передавать функцию, поэтому её оборачивают в объект с единственным методом. Python умеет передавать функции, хранить их в словарях и менять поведение во время выполнения, поэтому обёртка-объект часто оказывается лишней церемонией. Профессиональная привычка - брать самый простой инструмент, выражающий замысел, и добавлять классы только когда они оправданы.

ПаттернКлассическая ООП-формаПитоническая форма
Синглтонкласс, скрывающий свой конструктормодуль (уже единственный на процесс)
Фабрикаиерархия классов-создателейсловарь-реестр вызываемых объектов
Стратегияинтерфейс стратегии + конкретные классыпередача функции первого класса
Наблюдательинтерфейсы субъекта и наблюдателясписок функций-подписчиков

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя