Библиотека питониста | Python, Django, Flask
38.4K subscribers
3.14K photos
92 videos
56 files
4.83K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36

#WXSSA
Download Telegram
От скриптов на коленке — к enterprise-агентам на Python

Накидать бота на LangChain за вечер может каждый. Но когда выкатываешь это в продакшн, начинаются проблемы: система зацикливается, память течёт, а API-ключи сжигают бюджет.

Мы пересобрали курс по AI-агентам для Python-разработчиков под реалии 2026 года. Это глубокий инженерный гайд, где мы учим превращать нестабильные скрипты в надёжные бэкенд-решения с жёстким контролем ресурсов.

Что мы разберём на практике:

— хардкорный RAG: обработка сырых PDF, тюнинг эмбеддингов под промышленные объёмы;
— продвинутый LangGraph: маршрутизаторы, time-travel, прерывания и human-in-the-loop;
— профилирование LLM: трассировка ошибок, логирование и динамическое переключение моделей;
— автоматизация: пишем агентов, которые сами управляют браузером и legacy-системами;
— безопасный деплой: как развернуть архитектуру без нарушения 152-ФЗ.

До 28 февраля по промокоду Agent доступна скидка 10 000 рублей.

Плюс работает акция «3 курса по цене 1» — забирайте два дополнительных направления бесплатно.

Стать AI-инженером
1
🛠 Шпаргалка: как писать тесты, которые не бесят

Главная проблема тестов — хрупкость. Это когда вы просто переименовали функцию или разбили один метод на два (не меняя логику), а тесты упали. Значит, вы тестировали детали реализации, а не поведение.

Solitary (Одиночные): Изолируем юнит, заменяя всё вокруг моками.

Минус: Тест намертво привязан к структуре кода. Изменили вызов — тест упал.
Когда юзать: Только для экстремально сложных алгоритмов с кучей граничных кейсов.

Sociable (Общительные): Тестируем юнит вместе с его реальными зависимостями (если они не лезут в БД/сеть).

Плюс: Высокая устойчивость к рефакторингу. Код внутри меняется — тест остается зеленым.
💡 Правило: Тестируй «что» делает код (результат), а не «как» (какие методы дергает).

Что и чем тестировать:
— Бизнес-логика (условия, расчеты, правила): Sociable Unit (минимум моков).
— Координация (код, который дергает БД, шлет письма, вызывает API): Интеграционный / Сервисный тест.
— Тривиальный код (простые геттеры, проброс параметров): Не тестировать отдельно. Он автоматически покроется интеграционными тестами.

Три правила «здорового» теста:
— Защита от багов: Находит ли тест реальную ошибку в логике?
— Устойчивость к рефакторингу: Могу ли я переписать код с нуля, сохранив результат, чтобы тест не упал?
— Простота поддержки: Насколько легко понять, что сломалось, без дебаггера?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🤩1
🐍 Переходим с простых скриптов на Python к сложным AI-агентам промышленного уровня

В 2026 году мало просто вызвать openai.chat.completions. Настоящий продакшн требует управления состояниями через LangGraph и жёсткого контроля за token usage.

Мы полностью обновили курс по AI-агентам, превратив его в руководство по превращению Python-кода в стабильную бизнес-систему.

📚 В обновлённой программе:

— продвинутый LangGraph: реализация human-in-the-loop и механизмов отката состояний;
— промышленный RAG: обработка разнородных документов и оптимизация семантического поиска;
— экономика агентов: автоматическое переключение между LLM для оптимизации затрат;
— инжиниринг: логирование, трассировка и работа в рамках 152-ФЗ.

Начните подготовку сразу после оплаты — вы получите доступ к базе знаний для плавного старта.

Специальные условия до 28 февраля:

— введите промокод Agent для получения скидки 10 000 рублей**;
— участвуйте в **акции «3 курса по цене 1» — выберите два любых курса в дополнение к основному.

👉 Получить доступ к курсу и подаркам
2
PEP 747 принят: теперь мы можем типизировать сами аннотации

В мире Python-типизации долгое время была «серая зона». Если вы хотели передать в функцию класс, вы писали type[T]. Но как только дело доходило до сложных штук вроде int | str или list[int], тайп-чекеры начинали ругаться.

⚡️ Принятый PEP 747 вводит `TypeForm[T]`, и это именно то, чего не хватало библиотекам вроде Pydantic и FastAPI.

Раньше type[int] работал, потому что int — это класс. Но list[int] или int | str — это не классы, а специальные объекты типов.

Попытка передать их в функцию с аннотацией type[T] выдавала ошибку в Mypy или Pyright. Разработчикам приходилось лепить Any, убивая всю пользу от статической проверки.

Теперь мы можем явно сказать: «Эта функция принимает форму типа»:

from typing import TypeForm

def trycast[T](target_type: TypeForm[T], value: object) -> T | None:
...

# Теперь это валидный код для тайп-чекера:
trycast(list[int], ["1", "2"]) # Вернет тип list[int] | None
trycast(int | str, 42) # Вернет тип int | str | None



Что это дает на практике:
1️⃣ Идеальное автодополнение: IDE будет точно знать, что возвращает ваша функция-фабрика или парсер, даже если вы передали туда сложный Generic или Union.
2️⃣ Безопасность библиотек: Авторы инструментов для сериализации и валидации смогут выкинуть «костыли» и сделать API максимально прозрачным.
3️⃣ Меньше `Any`: Теперь можно типизировать практически всё, что в Python считается валидной аннотацией.

Фишка появится в Python 3.15, но через typing_extensions её можно будет использовать гораздо раньше.

🔗 Подробности: https://clc.to/kX2xMg

А вы часто сталкивались с тем, что `type[T]` не хватало для ваших задач? Как выкручивались — через `Any` или просто игнорировали ошибки?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»

Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!

🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
👍4👏1
📱 Python новости за последние 7 дней

PEP 747 принят — теперь можно типизировать сами аннотации
Типизация выходит на новый уровень: теперь можно описывать типы… для типов. Python всё увереннее движется в сторону статического анализа, и граница между «динамичным» и «строго типизированным» языком продолжает размываться.

Perl и R возвращаются, Python теряет 19% популярности?
Громкий заголовок, но паниковать рано. Рейтинги любят колебания, а экосистема Python по-прежнему гигантская. Хотя немного здоровой конкуренции языку точно не повредит.

LEGB и область видимости — неочевидные грабли
Local, Enclosing, Global, Built-in — правило простое, а баги из-за него иногда очень нет. Хороший разбор с примерами.

mmap в Python — быстрый I/O через отображение в память
Отличный инструмент для работы с большими файлами и бинарными форматами.

Шаблонные строки в Python 3.14
Больше контроля над интерполяцией данных — меньше сюрпризов в runtime.

ООП в Python за одну статью
Компактный, но системный разбор от базового класса до архитектурных принципов.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
⚡️ uv обошел Poetry по загрузкам

Это официально: согласно свежей статистике загрузок с PyPI, инструмент uv от команды Astral (авторов Ruff) обогнал Poetry.

Если вы всё еще используете Poetry, вот почему весь мир переходит на uv:

1️⃣ Безумная скорость: uv написан на Rust. Там, где Poetry тратит 10–15 секунд на разрешение зависимостей, uv справляется за 0.5 секунды. Разница не в процентах, а в десятки раз.

2️⃣ Всё в одном: uv заменяет собой целую пачку инструментов: pip, poetry, pyenv, pipx и virtualenv. Один бинарник, который умеет всё — от установки версии Python до управления воркспейсами.

3️⃣ Глобальный кэш: uv не копирует пакеты в каждый проект. Он использует хардлинки, экономя гигабайты места на диске.

4️⃣ Нативность: uv максимально следует стандартам (PEP). Он не пытается «изобрести свой велосипед», а делает стандартные инструменты лучше.

Короткий чек-лист по переходу:

Было: poetry install -> Стало: uv sync
Было: poetry add requests -> Стало: uv add requests
Было: poetry run python main.py -> Стало: uv run main.py

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍264👾4🤔1😢1
🚀 Starlette наконец-то дозрел до версии 1.0

Если вы пишете на Python, то Starlette — это «серый кардинал» вашего стека. Вы можете не использовать его напрямую, но он крутится под капотом у FastAPI, Litestar и еще десятка фреймворков.

Том Кристи создал этот проект почти 8 лет назад (в 2018-м), и всё это время мы жили на версиях 0.x. И вот, наконец, вышел 1.0.0rc1.

Дело не только в красивой цифре. В 2026 году Starlette стал критической деталью в мире ИИ.

✔️ Он — база для Python MCP SDK (Model Context Protocol). Если вы строите агентов, которые должны общаться с внешним миром, вы скорее всего используете Starlette.
✔️ 10 миллионов скачиваний в день. Это буквально фундамент современного асинхронного веба.

В новой версии разработчики вырезали всё старое и неактуальное (deprecated), что копилось годами, и зафиксировали API.

👀 Если у вас FastAPI, просто подождите — обновление прилетит само как зависимость. Если же вы используете Starlette напрямую для своих микросервисов, самое время прогнать тесты на 1.0.0rc1.

🔗 Release Notes: https://clc.to/RevWVg

А вы когда-нибудь пробовали писать на чистом Starlette без FastAPI? Или считаете, что без Pydantic-валидации в вебе делать нечего?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
Media is too big
VIEW IN TELEGRAM
🎨 Ast-visualizer превращает код в карту и графики

Проект Ast-visualizer предлагает перестать гадать, где в коде «тонкие места», и начать их видеть. Инструмент анализирует AST (абстрактное синтаксическое дерево) вашего проекта и строит на его основе наглядные отчеты.

Что умеет инструмент:
🔝 Интерактивные AST-деревья: Визуализация структуры отдельных файлов с цветовой подсветкой.
🔝 Radial View: Радиальный вид дерева. Позволяет одним взглядом понять, где в файле спрятаны самые «толстые» функции.
🔝 Тепловая карта сложности: Сложные участки кода (по Мейкейбу) подсвечиваются красным прямо в дереве.
🔝 Граф зависимостей: Показывает, как файлы связаны через импорты. Незаменимая вещь для поиска круговых зависимостей.
🔝 Dashboard поддержки: Рассчитывает индекс поддерживаемости (0–100) и выдает ТОП-5 кандидатов на рефакторинг.

Большинство AST-эксплореров просто рисуют дерево одного файла. Ast-visualizer идет дальше: он интерпретирует данные, объединяет их в масштабе всего репозитория и визуализирует в разных форматах — от радиальных схем до графиков сложности по строкам.

🔗 Попробовать на своем коде: https://clc.to/yV4wag

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤩2🤔1
🌍 icu4py: правильная работа с текстом и локализацией

Если вы хоть раз делали интернационализацию (i18n) в Python, то знаете, какая это боль.

Библиотека ICU (International Components for Unicode) — это мировой стандарт (её используют Chrome, macOS и VS Code), но в Python с ней всегда было сложно: либо древний неудобный API, либо мучения с установкой системных зависимостей.


icu4py — современная библиотека-обертку, которая делает работу с Unicode приятной:

1. MessageFormat
Он сам разруливает правила множественного числа (plurals), которые в каждом языке свои:
— English: 0 files, 1 file, 5 files.
— French: 0 fichier (единственное число), 1 fichier, 2 fichiers.

С icu4py вам не нужно писать if count == 1 для каждого языка — библиотека сама знает стандарты Unicode для любой локали.

2. Boundary Analysis
Разбить текст на предложения — это не просто поиск точки. Нужно учитывать кавычки, сокращения и специфику языка.
Класс SentenceBreaker понимает контекст и не разрывает предложение на «т. д.» или внутри цитаты.


🔗 Установка: pip install icu4py
📂 GitHub: https://clc.to/KdjSUQ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!

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

В программе:

— практика в Jupyter: структурный вывод и типизация PydanticAI;
— профессиональная оркестрация в LangGraph и другая парадигма AutoGen;
— продвинутый RAG для продакшена и парсинг сложных документов;
— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.

В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).

Доступ к материалам для предварительной подготовки откроется сразу после оплаты.

По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!

👉 Присоединиться к четвёртому потоку и вывести агентов в прод
1
🛠 cattrs: де-сериализация в Python

cattrs берет на себя всю грязную работу по превращению «сырых» словарей в красивые структурированные объекты и обратно. При этом ваши модели остаются чистыми — в них нет ни строчки кода, отвечающего за JSON.

Из главного:
1. Разделение ответственности: Ваши классы данных — это просто данные. Логика преобразования живет отдельно в объекте Converter.
2. Поддержка всего и вся: Из коробки работают attrs, dataclasses, TypedDict, NewType, сложные Union и даже новые Type Aliases из Python 3.12.
3. Скорость: cattrs генерирует оптимизированный код для преобразования «на лету».

💻 Пример в три строки


from attrs import define
from cattrs import structure, unstructure

@define
class User:
id: int
tags: list[str]

# Превращаем словарь в объект (Structuring)
user = structure({'id': 1, 'tags': ['python', 'cattrs']}, User)
# User(id=1, tags=['python', 'cattrs'])

# Превращаем объект обратно в словарь (Unstructuring)
dict_data = unstructure(user)



🔗 Документация

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
🛠 Проблема: неопределенность возвращаемого типа

Представьте функцию, которая генерирует конфиг. Если действие — DELETE, она возвращает список путей (`list[str]`), в остальных случаях — словарь (`dict`).


def generate_config(context: dict, action: Action) -> dict | list[str]:
...



Для Mypy такая функция возвращает «или словарь, или список». Если вы попытаетесь использовать результат как чистый dict, тайп-чекер выдаст ошибку, даже если вы уверены в типе.

Решение: использование @overload

Декоратор @overload позволяет описать конкретные комбинации входных и выходных данных:

from typing import overload, Literal

@overload
def generate_config(context: dict, action: Literal[Action.DELETE]) -> list[str]: ...

@overload
def generate_config(context: dict, action: Literal[Action.MODIFY, Action.ADD]) -> dict: ...

def generate_config(context: dict, action: Action) -> dict | list[str]:
# Реальная логика здесь
...


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143
Последний шанс: 3 курса по цене 1 и запуск AI-агентов в продакшн

Писать простые скрипты к API на Python — весело, но тренд 2026 года — это сложные мультиагентные системы. Как контролировать затраты на LLM, управлять оркестрацией и не нарушить 152-ФЗ?

В обновлённой программе фокус смещён на жёсткий инжиниринг и вывод в прод. Вы освоите типизацию через PydanticAI, научитесь строить ReAct-циклы, работать с LangGraph и AutoGen, внедрять продвинутый RAG и MCP. Все ключевые навыки в одном месте: AgentOps, time-travel дебаггинг, управление браузером, human-in-the-loop и развёртывание open-source моделей в закрытых контурах.

Почему нельзя откладывать:

— масштабная акция «3 курса по цене 1» сгорит уже завтра;
— промокод Agent на скидку 10 000 рублей действует последние часы;
— сразу после оформления открываются материалы для подготовки — начать учиться можно прямо сейчас.

Забронировать место на курсе и забрать бонусы до 28 февраля
4
🎯 Шпаргалка по переводу чисел между базами

Python позволяет легко переключаться между десятичной, двоичной, восьмеричной и шестнадцатеричной системами.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4👾1
🛠 Валидация в Runtime через Type Annotations

Если вы использовали Pydantic или FastAPI, вы видели, как аннотации типов магическим образом проверяют входящие данные. Но как реализовать это самому, используя только стандартную библиотеку Python?

Ключ к разгадке — typing.Annotated. Этот механизм позволяет добавлять произвольные метаданные к типам, которые Python игнорирует при проверке типов, но которые мы можем прочитать во время выполнения программы.

1️⃣ Как достать метаданные

Для этого используется функция get_type_hints с флагом include_extras=True.


import typing as t
from dataclasses import dataclass

@dataclass
class User:
age: t.Annotated[int, "должен быть > 0"]

# Получаем: {'age': typing.Annotated[int, 'должен быть > 0']}
annotations = t.get_type_hints(User, include_extras=True)



2️⃣ Реализация своего валидатора

Автор предлагает элегантное решение: использовать frozen dataclasses и метод __post_init__ для автоматической проверки полей сразу после создания объекта.

Основные шаги:
1. Перебираем все аннотации класса.
2. Ищем в метаданных объекты, которые можно вызвать (`callable`).
3. Применяем их к значениям атрибутов.
4. Используем object.__setattr__, чтобы обойти ограничение неизменяемости (frozen).

3️⃣ Группировка ошибок (Exception Groups)

В Python 3.11 появились ExceptionGroup, и автор мастерски применяет их здесь. Вместо того чтобы падать на первой же ошибке, валидатор собирает все нарушения и выбрасывает их одним списком. Это критично для удобства API и фронтенда.


class ValidationErrorGroup(ExceptionGroup):
pass

# В итоге при ошибке вы получите детальный отчет:
# ValidationErrorGroup: Validation Errors (2 sub-exceptions)
# ├── ValueError: -1 must be > to 0 (attribute 'x')
# └── ValueError: String is empty (attribute 'y')



4️⃣ Классы против Замыканий

Автор сравнивает два подхода к созданию правил:
Вызываемые классы (как в Pydantic): Удобно читать, легко настраивать через аргументы __init__.
Замыкания (Closures) и partial: Более функциональный стиль, который позволяет изящно комбинировать проверки, например: Annotated[int, gte(0), lt(100)].

🔗 Ссылка на оригинальный пост

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2
Python — это мощь, но готов ли ты построить на нём (и не только) бизнес? 🚀

Proglib App ищет технического кофаундера. Это EdTech-платформа для разработчиков: курсы, интерактивные квизы и ИИ-тьюторы. MVP уже работает, юзеры растут, и нам нужен человек, способный взять на себя техчасть.

Это шанс выйти за пределы скриптов и стать архитектором продукта, которым пользуются тысячи коллег.

🛠️ Стек и инструменты:

TypeScript, React 18, Express 5, PostgreSQL, Drizzle ORM. Используем Claude Code и Cursor.

Твои задачи:

• Проектировать масштабируемую архитектуру и пилить фичи. • Внедрять ИИ-агентов в образовательный процесс. • Работать автономно в связке с основателем.

Ожидания:

• Уверенное владение TS, React, Node.js и SQL. • Понимание, как устроены современные веб-сервисы. • Самостоятельность: взял задачу — довёл до результата.

Удалёнка, гибкий график и полная свобода в принятии технических решений.

Готов делать сервис, который изменит обучение в IT? Пиши о себе и кидай GitHub 👇

@proglibrary_feedback_bot
1
📱 Python новости за последние 7 дней

📊 Pandas: от CSV до продвинутой аналитики за одну статью
Большой разбор по pandas — от чтения CSV до группировок, агрегаций и более сложной аналитики. Хороший материал, чтобы систематизировать базу.

🏆 Сделка с совестью на хакатоне: как победить с нерабочим кодом?
Живая история команды, которая выиграла хакатон, несмотря на технические проблемы. Много инсайтов про презентацию, стратегию и то, как на самом деле оцениваются проекты.

🎭 Декораторы в Python — просто о сложном
Разбор декораторов в Python — от объяснения для новичков до чуть более продвинутых кейсов.

🤔 Python уже не торт?
Размышления о том, как меняются приоритеты разработчиков и почему вокруг Python стало больше дискуссий.

💾 Работа с объёмными данными в Python для начинающих
Вводный материал про обработку больших данных в Python: базовые подходы, инструменты и ограничения.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤩1
🏭 Паттерн «Фабрика» в Python: как перестать плодить спагетти-код

Если в вашем коде то и дело встречаются бесконечные цепочки if-elif-else для создания разных объектов, пришло время познакомиться с Factory Pattern. Это один из самых полезных порождающих паттернов, который берет на себя всю грязную работу по созданию экземпляров классов.

💡 В чем суть

Вместо того чтобы вызывать конструктор класса напрямую (`EmailNotifier()`), вы обращаетесь к специальному методу-фабрике. Он сам решает, какой объект создать, основываясь на входных данных или конфигурации.

Представьте ресторан: вы не идете на кухню готовить блюдо сами (не создаете объект). Вы делаете заказ официанту (фабрике), и кухня возвращает вам готовый результат, не нагружая вас деталями рецепта.

3 способа сделать вашу фабрику лучше:
1. Словари вместо if-elif: Чтобы код не превращался в «лесенку», используйте словарь, где ключи — это типы, а значения — сами классы.
2. Передача параметров: Хорошая фабрика умеет не только создавать объект, но и сразу прокидывать в него нужные настройки (например, заголовок документа или автора).
3. Абстрактные базовые классы (ABC): Используйте модуль abc, чтобы гарантировать, что все объекты, созданные фабрикой, имеют одинаковый набор методов (например, send() или `connect()`).

🛠 Реальный пример: Фабрика подключений к БД

Это, пожалуй, самый практичный кейс. Вы можете создать метод create_from_config(config), который сам поймет, нужно ли подключаться к MySQL, PostgreSQL или SQLite, просто прочитав файл настроек.


# Пример вызова
db = DatabaseFactory.create_from_config(production_config)
print(db.connect())



Когда использовать:
🔛 Когда у вас много родственных классов с общим интерфейсом.
🔛 Когда решение о том, какой класс создать, принимается только в момент работы программы (runtime).
🔛 Когда процесс создания объекта слишком сложен и вы хотите скрыть эту логику.

🔗 Полный гайд с примерами кода:

А вы используете паттерны в своих проектах или считаете их лишней абстракцией для Python?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
7👏4👍2