Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 11

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

В реальных проектах на Python востребованность паттернов GoF сильно ниже, чем в Java/C# ввиду иных решаемых задач/проектов. Многие из них либо встроены в язык, либо решаются проще

3 паттерна встроены в язык:

  1. Декоратор

  2. Итератор

  3. Синглтон

Многие паттерны реализуются через ФП:

  1. Стратегия = передача функции как параметр

  2. Фабричный метод = функция, которая возвращает экземпляр нужного класса

А не вот это вот всё...

Полностью согласен!

Только вот не очень понял насчёт singleton. Что имели ввиду под "встроен в язык"?

Singleton: Решается импортом модуля. import config — и у вас есть глобально один config

Можно ещё добавить магическую команду exec как шаблон кодогенерации. Например, в начале скрипта проинициализировать некие статические счётчики для отладки

A, N = "", 40
for i in range(N):
    if i < (N - 1): #неявный else
        A = A + ("CTR"+str(i)+"=1"+';') + ("DBGL"+str(i)+"=0"+';')
exec(A)

exec это же дыра в безопасности, особенно если выполнять то что пришло параметром в функцию.

Вот, это ключевой момент который в принципе тормозит весь прогресс из разряда "данные это код" Since 1958 by LISP. ИИ-помощник не меньшая дыра если не следить, туда же внешние макросы и прочие make, куда можно прилинковать напрямую любой код, качнув его по wget. Это что касается этапа построения. Что же до рантайма то должны быть способы для создания подобия песочниц-контейнеров прямо в коде. Начиная от специальных областей памяти для ввода паролей с солью и заканчивая VM содержащей только окружение и область для временных объектов, вообщем malloc, но для кода.
В принципе, формально, функция есть нечто иное как изменение области видимости с сохранением окружения (call), если нет стека - то это процедура (jmp) и в качестве аргумента также может быть исполняемый код как указатель на функцию или адрес перехода. На С можно сделать аналог функции не применяя саму функцию. Например a - это аргумент и локальная переменная (как правило, размещаемая в стеке или регистре {} - область видимости)

/*"Лямбда"*/
{
  int a=0;
  goto sub;
  ret:
  goto bypass;
  {
    sub:
    int a=1;
    goto ret;
  }
  bypass:
}

Ещё одна статья галопом-по-европам с оторванными онт жизни примерами GoF вперемешку с чисто питоньими штуками.

Почему декоратор проиллюстрирован питоньим декоратором, а не вот этими всеми абстрактными классами... А фабрика - наоборот, по-явовски, вместо того, чтобы натрюкачить с метаклассом?

Если задача автора была показать паттерны - то надо было перевести примеры из GoF на питон, как есть. Если показать питон - то надо было объяснять, какие вещи в питоне делаются с поддержкой ядра языка (те же итераторы, например), а какие придётся рукоделить.

А главное, - зачем вообще надо эти паттерны воплощать.

Вот, например, итератор - это жизненная необходимость для любых коллекций, чтобы доступ к ним был унифицирован (синтаксис for и стандартная библиотека - min, map, itertools и всё такое). То есть, это требование языка, а не требование архитектуры приложения или предметной области.

И то, - с одной стороны, последовательный доступ, а с другой - прямой (по ключу или индексу). Почему не проиллюстрировано, а?

Что в Вашей статье есть принципиально нового? Кроме простых примеров, которые немного демонстрируют работу и поведение паттернов, хорошо описанных на куче разных других ресурсах (на данном ресурсе в том числе). На мой взгляд - вообще ничего нового. Темы эти поднимались уже кучу раз и где только о паттернах нельзя сейчас почитать.

Рекомендую ознакомится с сайтом, с которого Вы взяли картинку для данной статьи, в которой все эти паттерны очень хорошо и структурно описаны, разобраны донельзя и предложен необходимый фундамент для их использования: Refactoring Guru

Прочитав название статьи "Фундаментальные шаблоны проектирования на Python" я ожидал увидеть что-то чисто питоновское, типа паттерны, принятые только в сообществе питона, этот самый Pythonic-way. Но тут увидел какие-то общие паттерны ООП, при том часть из них, как уже написали встроены в язык. И реализация многих не сильно Pythonic. Нужно было назвать типа "Описание паттернов ООП и примеры их реализации на Python"

"Как сделать из пистона жабу, пособие для начинающих". Не, я одобряю, если что

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации