Python Design Patterns: руководство для понятного и модного кода

Python — это мощный объектно-ориентированный язык программирования высокого уровня с динамической типизацией и связыванием. Благодаря его гибкости и мощности разработчики часто используют определенные правила, или паттерны проектирования Python. Что делает их такими важными и что это значит для рядового разработчика Python? В этом посте мы объясняем новичкам, почему Python отлично подходит для паттернов проектирования, и как их можно использовать для раскрытия еще большего потенциала или для оптимизации разработки (и повышения удобства сопровождения кода).
Потужний курс від skvot: blender.
Відкрийте для себе світ 3D-графіки.

Давайте повторим это еще раз: Python — это высокоуровневый язык программирования с динамической типизацией и динамическим связыванием. Я бы описал его как мощный динамический язык высокого уровня. Многие разработчики влюблены в Python за его понятный синтаксис, хорошо структурированные модули и пакеты, а также за его огромную гибкость и набор современных возможностей.
В Python ничто не обязывает вас писать классы и инстанцировать объекты из них. Если вам не нужны сложные структуры в вашем проекте, вы можете просто писать функции. Еще лучше, если вы можете написать плоский скрипт для выполнения какой-то простой и быстрой задачи, вообще не структурируя код.
В то же время Python — это стопроцентно объектно-ориентированный язык. Как это? Ну, проще говоря, все в Python является объектом. Функции — это объекты, еще точнее — это объекты первого класса (что бы это ни значило). Этот факт о том, что функции являются объектами, очень важен, поэтому запомните его.
Професійний курс від robotdreams: Алгоритми та структури даних.
Знаходьте нестандартні рішення у складних робочих задачах.
Итак, вы можете писать простые сценарии на Python или просто открывать терминал Python и выполнять операторы прямо там (это так полезно!). Но в то же время вы можете создавать сложные фреймворки, приложения, библиотеки и так далее. В Python можно сделать очень многое. Конечно, есть ряд ограничений, но это не тема данной статьи.
Однако, поскольку Python настолько мощный и гибкий, нам нужны некоторые правила (или паттерны) при программировании на нем, чтобы самоограничить себя (и своих коллег!) в потенциальной путанице и фривольности.
Итак, давайте посмотрим, что такое паттерны программирования и как они связаны с Python. Далее мы приступим к реализации нескольких основных паттернов проектирования Python.
Почему Python хорош для паттернов?
Любой язык программирования хорош для паттернов. На самом деле, паттерны следует рассматривать в контексте любого языка программирования. И паттерны, и синтаксис языка, и наш человеческий темперамент накладывают ограничения на наше программирование.
Ограничения, исходящие от синтаксиса языка и его природы (динамический, функциональный, объектно-ориентированный и т.п.), могут быть разными, как и причины их существования. Ограничения, исходящие от паттернов, существуют не просто так, они целенаправленны. Это основная цель паттернов: рассказать нам, как делать что-то и как этого не делать. Мы поговорим подробней о паттернах, и особенно о паттернах проектирования Python чуть позже.
Философия Python построена на идее хорошо продуманных лучших практиках. Python — динамический язык (я уже говорил об этом?) и, как таковой, облегчает реализацию ряда популярных паттернов проектирования с помощью нескольких строк кода. Некоторые паттерны проектирования встроены в Python, поэтому мы используем их, даже не зная об этом. Другие паттерны не нужны из-за особенностей языка.
Например, Factory — это структурный паттерн проектирования Python, направленный на создание новых объектов, скрывая логику инстанцирования этих объектов от пользователя. Но создание объектов в Python динамично по своей природе, поэтому такие дополнения, как Factory, не нужны. Конечно, вы можете реализовать его, если захотите. Могут быть случаи, когда это будет действительно полезно, но это исключение, а не норма. Что же такого хорошего в философии Python?
Давайте начнем с этого (изучите это в терминале Python):
> >> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Возможно, это не паттерны в традиционном смысле, но это правила, которые определяют «питонический» подход к программированию наиболее элегантным и полезным образом.
Професійний курс від skvot: PR basis.
Засвоєте основи PR та комунікації.
У нас также есть руководство по коду PEP-8, которое помогает структурировать наш код. Для меня это обязательное условие, конечно, с некоторыми уместными исключениями. Кстати, эти исключения поощряются самим PEP-8.
Но самое главное: важно понимать тот момент, когда нужно быть непоследовательным — иногда руководство по стилю просто неприменимо. Если вы сомневаетесь, сделайте паузу, не спеша обдумайте все. Посмотрите на другие примеры и решите, что выглядит лучше. И не стесняйтесь спрашивать у более опытных коллег!
Объедините PEP-8 с The Zen of Python (тоже PEP — PEP-20), и у вас будет отличная основа для создания читабельного и удобного кода. Добавьте паттерны проектирования, и вы будете готовы создавать любые программные системы с правильным поддерживаемым кодом.
Паттерны проектирования Python
Что такое паттерн проектирования?
Все начинается с «Банды четырех» (GOF). Проведите быстрый поиск в Интернете, если вы не знакомы с GOF.
Python паттерны проектирования как научиться



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Курс Шаблоны проектирования на Python

Научитесь распознавать и применять на практике все шаблоны (паттерны) проектирования из легендарной книги “банды четырёх”
Курс даёт всеобъемлющий обзор паттернов (шаблонов) проектирования на Python на практике. На этом курсе мы рассмотрим все шаблоны проектирования из книги «банды четырёх», а также их различные современные вариации с поправками и использованием особенностей языка Python.
Вы научитесь распознавать и применять шаблоны проектирования на Python. Оценивать применимость того или иного шаблона в конкретной ситуации. Проводить рефакторинг (перепроектирование, равносильное преобразование алгоритмов) существующего кода с привнесением паттернов.

Курс Шаблоны проектирования на Python — Изучение паттернов проектирования на Python на практике
Поделитесь страницей с друзьями
О курсе — Чему Вы научитесь?
Что такое паттерны проектирования?
Паттерны (или шаблоны) проектирования — это продуманные типовые решения типовых задач.
Шаблоны проектирования — это общие архитектурные подходы, которые люди наблюдали в объектно-ориентированном программировании. И в итоге решили составить каталог из тех, что встречались чаще всего.
В программировании достаточно много времени уделяется оптимизации кода. И переделывать сложнее, чем изначально заложить такую структуру и стиль, которые будут нуждаться в минимальных доработках. Нужно быть настоящим архитектором своего кода, а поможет в этом понимание и грамотное применение шаблонов проектирования.
Шаблоны проектирования — это важнейший из инструментов разработчика, который упрощает и ускоряет процесс обмена информацией при разработке, сокращает время на обсуждения по проектам и понимание «чужого» кода. Сами названия шаблонов являются полноценными терминами, означающих готовые схемы-решения.
Шаблоны проектирования встречаются повсюду: в любых библиотеках, они встроены в сами языки программирования. Так что вы даже не всегда осознаёте, что ими уже пользуетесь.
Впервые шаблоны проектирования были введены в оборот в 1994 году с выходом книги Design Patterns: Elements of Reusable Object-Oriented Software за авторством Erich Gamma (Эрих Гамма), John Vlissides (Джон Влиссидес), Ralph Johnson (Ральф Джонсон) and Richard Helm (Ричард Хелм), которых часто именуют “Бандой четырёх” (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования и создала целую отрасль, посвящённую шаблонам проектирования.
Чему вы научитесь
- использования самой новой версии Python
- использования современных подходов программирования: инъекции зависимостей, реактивное программирование и т.д.
- использования современных средств разработки таких как PyCharm
- дискуссий различных вариаций паттернов и различных подходов
- Принципы проектирования SOLID: принцип единственной ответственности (SRP), принцип открытости / закрытости (OCP), принцип подстановки Лисков (LSP), принцип разделения интерфейсов (ISP), принцип инверсии зависимостей (DIP)
- Паттерны порождения: строитель, фабрики, прототип, одиночка
- Структурные паттерны: адаптер, мост, компоновщик, декоратор, фасад, приспособленец, прокси
- Поведенческие паттерны: цепочка зависимости, команда, интерпретатор, итератор, медиатор, хранитель, наблюдатель, состояние, стратегия, шаблонный метод, посетитель
- Курс для опытных (как минимум очень хорошо знакомых с Python) разработчиков, которые хотят познакомиться с современными вариантами реализации паттернов (а не только книжными устаревшими)
- Для понимания и осознания этого материала требуется хорошее абстрактное мышление инженерное или побольше практики в программировании
- Уверенные знания в Python
Присоединяйтесь к изучению Python на профессиональном уровне!
Подборка ссылок для изучения паттернов
Разнообразные материалы для изучения паттернов проектирования в нашей подборке: книги, курсы, задачки.
Теория
Отличная книга серии «Head First» издательства O’Reilly, которая подойдёт для того, чтобы начать знакомство с паттернами. Уникальный способ подачи материала выделяет её в ряду множества скучных книг, посвященных программированию. Можно найти в электронном варианте.
Знаменитая группа авторов «банда четырех» выпустила одну из лучших книг по теме паттернов. Это отличный пример структурированного и продуманного изложения. По сути, книга заложила терминологию, которой пользуются практически все программисты, обсуждая то или иное архитектурное решение. Также доступна в электронном виде на просторах Интернета.
Видеообзор основных паттернов проектирования доступным для понимания языком:
Серия статей про паттерны, написанных простым языком. Статьи разбиты по типу паттернов: порождающие, структурные и поведенческие.
Целый сайт с каталогом из 22 классических паттернов. Каждый паттерн сопровождается качественными и понятными схемами и иллюстрациями.
Для закрепления и структуризации изученного материала отлично подойдут вот такие шпаргалки.
Практика
Курс «ООП и паттерны проектирования в Python» на русском языке от Mail.ru и МФТИ. В ходе курса вы научитесь на практике применять знания паттернов. Для его прохождения нужно знать реализации ООП-парадигмы в Python: классы, объекты, атрибуты, методы.
Ещё один курс, в котором можно ознакомиться с примерами реализации некоторых шаблонов проектирования на языке Java.
В данном GitHub-репозитории собраны все паттерны, которые только придумало человечество за всё время своего существования.
Подборка задач на языке Java для закрепления знаний по определённым паттернам: