🪄 Магические методы и атрибуты
|
В Python есть более 100 магических методов и 50+ магических атрибутов. И те, и другие обозначаются двойными нижними подчеркиваниями, откуда и пошло их название – dunder (double underscore): - Dunder методы – это функции, которые определяют поведение объектов при определенных операциях. Например, __init__, __str__, __len__ и т.д.
- Dunder атрибуты – это встроенные свойства объектов, которые предоставляют информацию о самом объекте или классе, например:
- __name__ – имя класса или функции.
- __doc__ – документационная строка класса, функции или модуля.
- __module__ – имя модуля, в котором определен класс или функция.
- __dict__ – словарь, содержащий атрибуты (данные) экземпляра объекта.
- __bases__ – кортеж базовых классов.
Некоторые магические методы редко применяются в повседневной разработке – они относятся к метапрограммированию, поскольку дают возможность создавать сложные метаклассы и управлять их поведением программным путем. Эти методы, к примеру, используются в разработке библиотек и фреймворков: - __prepare__ – вызывается при создании словаря для нового класса в метаклассе (классе, создающем другие классы). Возвращаемое значение станет __dict__ для нового класса.
- __instancecheck__ – определяет поведение оператора isinstance(obj, Class), который проверяет, является ли объект экземпляром данного класса.
- __subclasscheck__ – определяет поведение оператора issubclass(Class1, Class2), который проверяет, является ли один класс подклассом другого.
- __init_subclass__ – вызывается после создания нового подкласса для выполнения дополнительной инициализации.
- __subclasses__ – возвращает список подклассов данного класса.
- __mro_entries__ – используется для определения метаданных о порядке разрешения методов (MRO) для класса.
- __class_getitem__ – вызывается, когда класс используется как функтор, например MyClass[args], и позволяет создавать специализированные версии класса.
Самый подробный путеводитель по всем магическим методам и атрибутам можно посмотреть здесь. |
Эти магические методы применяются в разработке фреймворков и библиотек |
🛠️ Инструменты, которые помогут писать профессиональный код
|
Автоматическое форматирование кода |
Стиль кода – это набор конвенций и рекомендаций, которым следуют профессиональные разработчики. Следование этим общепринятым рекомендациям: - Обеспечивает согласованность, читаемость и понятность кода.
- Облегчает расширение и поддержку кодовой базы.
Привести код в такой вид можно автоматически, с помощью форматировщиков: - PEP8 (pycodestyle) – проверяет код на соответствие основным конвенциям стиля в PEP 8.
- Black – автоматически форматирует код в полном соответствии со стилем PEP 8.
- isort – сортирует импорты в алфавитном порядке и автоматически разделяет их по типу.
- YAPF – основан на clang-format, популярном форматировщике кода для C++. Переформатирует код так, чтобы он соответствовал руководству PEP 8 и легко читался.
- AutoPEP8 – основан на pycodestyle, автоматически приводит код в соответствии с PEP 8.
|
Линтеры анализируют код для обнаружения потенциальных багов, стилистических ошибок и подозрительных конструкций. Они помогают разработчикам избежать распространенных недочетов и ошибок. - Pylint – проверяет код на наличие ошибок и на соблюдение стандартов (длина строк, названия переменных и т.п.)
- Flake8 – совмещает в себе pycodestyle, pyflakes и плагин mccabe. Проверяет код на соответствие PEP 8, находит ошибки (например, SyntaxError, NameError и т.д.) и оценивает цикломатическую сложность.
- Pyflakes – похож на Pylint, но фокусируется только на ошибках, а не на стиле.
- Bandit – инструмент, разработанный проектом OpenStack Security. Предназначен для поиска распространенных проблем безопасности.
- Ruff – супербыстрый линтер для выявления типичных ошибок и нарушений стиля. Имеет более 700 встроенных правил и собственные реализации популярных плагинов (например, flake8-bugbear). Система кэширования предотвращает повторный анализ неизмененных файлов.
- Pylama – комплексная система для аудита кода. Объединяет под одним интерфейсом Pylint, pycodestyle, PyFlakes, mccabe и другие популярные инструменты.
- Prospector – еще один комплексный инструмент, который объединяет несколько линтеров.
|
Проверка типов помогает предотвратить множество ошибок, связанных с использованием переменных неверного типа, что делает код более безопасным и предсказуемым. - Mypy – проверяет, соответствуют ли значения переменных их объявленным типам, и помогает обнаруживать целый класс ошибок до запуска кода.
- Pyright – быстрый анализатор типов, предназначенный для объемных кодовых баз. Может работать в режиме наблюдения и выполнять быстрые инкрементальные обновления при изменении файлов.
- Pytype проверяет и определяет типы, не нуждается в аннотациях типов. Обнаруживает ошибки типов до запуска кода.
- Pyre – эффективный анализатор типов, может анализировать кодовые базы с миллионами строк кода инкрементально, предоставляя мгновенный фидбэк.
- MonkeyType собирает типы аргументов функций и возвращаемых значений во время выполнения, может автоматически добавлять аннотации типов непосредственно в код.
|
Юнит-тесты – это небольшие изолированные тесты, которые проверяют функциональность конкретного участка кода. - PyTest – полнофункциональный инструмент для тестирования Python-кода. Предлагает простой и удобный способ написания компактных тестов в виде функций.
- Unittest – встроенный модуль Python, вдохновленный архитектурой фреймворка xUnit. Это отличный инструмент для создания и систематической организации тестов.
- DocTest – еще один стандартный модуль. Ищет в строках документации фрагменты текста, которые выглядят как интерактивные сессии Python, а затем выполняет эти сессии, чтобы убедиться, что они работают точно так, как показано в документации.
- Tox – мощный инструмент для автоматизации и стандартизации тестирования в различных средах. Если приложению необходимо работать в нескольких версиях Python, Tox поможет обеспечить его согласованную работу во всех этих версиях; если проект имеет сложные зависимости, Tox может управлять этими зависимостями изолированно в разных средах.
- Hypothesis – это мощная библиотека для простого создания юнит-тестов. Использует подход, называемый тестированием свойств – он стал популярным благодаря библиотеке Haskell Quickcheck.
|
Хорошая документация – это развернутые, подробные пояснения к программе, которые показывают, как она работает и как ее использовать. Такая документация служит ценным справочным материалом для пользователей, и делает код понятным для разработчиков. - Sphinx – облегчает создание структурированной, понятной, визуально привлекательной документации.
- MkDocs – быстрый и простой генератор статических сайтов, ориентированный на создание документации проектов. Файлы документации пишут на Markdown, а внешний вид настраивается с помощью одного YAML файла.
- Pydoc – модуль в Python, который генерирует документацию для модулей, скриптов и классов.
- Read the Docs упрощает весь процесс создания и поддержки документации – автоматизирует сборку, версионирование и хостинг.
- Doxygen – удобный генератор документации. Поскольку документация пишется внутри кода, ее проще поддерживать в актуальном состоянии. Кроме того, Doxygen предусматривает перекрестные ссылки между документацией и кодом, чтобы читатель документа мог легко перейти к фактическому коду.
|
🧪 Тестирование асинхронного кода
|
Асинхронный код позволяет выполнять операции параллельно, эффективно используя ресурсы, особенно при работе с сетевыми запросами и другими задачами ввода-вывода. Для тестирования такого кода автор этого видео рекомендует использовать фреймворк PyTest и плагин pytest-asyncio. Есть два основных способа организовать тестирование: - Использовать фикстуру (вспомогательную функцию) для создания цикла событий asyncio перед каждым тестом и его закрытия после теста. В самом тесте мы можем запускать асинхронные функции в этом цикле событий.
- Воспользоваться плагином pytest-asyncio, который автоматически создает цикл событий для каждого теста. Тесты помечаются декоратором, а асинхронные функции вызываются с await внутри.
|
🏠 Как сделать клон платформы Airbnb
|
Бесплатный видеокурс показывает процесс разработки аналога Airbnb с нуля: - Фронтенд создан на React, NextJS и Tailwind.
- Бэкенд работает на Django, API сделан с помощью DRF.
|
🧗 Mountaineer – фреймворк на Python и React
|
Python идеально подходит для создания бэкенда, а React – для фронтенда. Но чтобы «склеить» их вместе, понадобится немало усилий и «клея» – полноценный API, fetch или axios и т.д. Роль такого клея и берет на себя Mountaineer – новый фреймворк для быстрой разработки бесшовных фулстек-приложений на Python и React. Основные возможности: - Типизация на всех уровнях – поддерживает type hints в коде фронтенда, бэкенда и для взаимодействия с базой данных.
- Простая связь клиент-сервер – легкий вызов функций, привязка данных и обмен данными между клиентом и сервером без дополнительной интеграции.
- Серверный рендеринг страниц – обеспечивает лучшую доступность и SEO.
- Статический анализ веб-страниц – реализован анализ ссылок, доступа к данным и т.д. для обеспечения валидности.
- Отсутствие API и Node.js сервера – фреймворк не нуждается в дополнительном API или Node.js сервере для обслуживания фронтенда.
| Mountaineer связывает бэк и фронт бесшовно |
Основные компоненты Mountaineer: - Модели данных – определяются с помощью Pydantic и SQLModel, связываются с базой данных.
- Контроллеры – определяют URL-маршруты, начальные данные для фронтенда и функции для взаимодействия.
- Представления – React-компоненты для визуализации пользовательского интерфейса.
- Сайд-эффекты – функции на сервере для обновления данных, вызываемые из фронтенда. Автоматически обновляют интерфейс.
Фреймворк включает инструменты для ускорения разработки – генератор проектов, утилиты для отслеживания изменений кода и автоматической пересборки, а также интеграцию PostCSS и TailwindCSS. На этом все, до встречи через неделю! |
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|