TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7526 2.95K
🏭 Паттерн «Фабрика» в 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?

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

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

#буст
  • ❤ 7
  • 👏 4
  • 👍 2
More from @pyproglib
  1. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  2. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  3. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  4. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  5. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  6. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →