Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
3 046 подписчиков · @BookPython
К каналу →
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://m…
Читать далее →
7 624
Реклама
yield from — элегантная передача управления Если вы пишете генераторы, которые вызывают другие генераторы — забудьте про for x in sub(): yield x. Есть способ проще и мощнее. Опер…
Читать далее →
7 506

default_factory в dataclass: мощнее, чем кажется

default_factory в dataclass: мощнее, чем кажется

Многие используют dataclass как удобный способ задать структуру с полями. Но редко кто по-настоящему раскрывает силу default_factory. А зря — он спасает от багов и даёт гибкость.

Когда нужно задать значение по умолчанию для поля в dataclass, логично тянуться к default=. Но если это изменяемый тип (например, список или словарь) — вас поджидает ловушка.

from dataclasses import dataclass, field

@dataclass
class User:
name: str
tags: list[str] = [] # ⚠️ опасно!

Все экземпляры User будут делить один и тот же список. То есть:

a = User("Alice")
b = User("Bob")
a.tags.append("admin")

print(b.tags) # ['admin'] 😱

Вместо этого используйте default_factory:

@dataclass
class User:
name: str
tags: list[str] = field(default_factory=list)

Теперь у каждого User будет свой список:

a = User("Alice")
b = User("Bob")
a.tags.append("admin")

print(b.tags) # []

Но default_factory не только про списки. Это отличный способ задать любое значение "по умолчанию", включая кастомную логику:

import uuid

@dataclass
class Session:
id: str = field(default_factory=lambda: str(uuid.uuid4()))

Или, например, значения из окружения:

import os

@dataclass
class Config:
debug: bool = field(default_factory=lambda: os.getenv("DEBUG") == "1")

Кстати, это ещё и отличное место для внедрения DI:

@dataclass
class Service:
client: "Client" = field(default_factory=create_default_client)

default_factory — это маленький хак, который позволяет сделать код чище и безопаснее, особенно когда работаешь с изменяемыми структурами или сложной инициализацией.

👉 @BookPython
Стандартный модуль json имеет интерфейс командной строки, который может быть полезен для форматирования JSON исключительно средствами Python. Модуль называется json.tool и вызывает…
Читать далее →
7 517
Скрытые фичи Enum: как выжать максимум Многие используют Enum как простой список констант. Но у enum.Enum в Python есть куда больше возможностей — и они могут сделать код чище и м…
Читать далее →
7 620
Другие главы канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 25.09.2026
Как быстро очистить список в Python? Сегодня я покажу вам несколько способов оч…
👁 297 просмотров
Глава от 24.09.2026
Работаете с СУБД? Присоединяйтесь к сообществу Pangolin для разработчиков и адми…
👁 479 просмотров
Глава от 24.09.2026
🚀 5 крутых Python-фишек, о которых знают не все Python — мощный и удобный язы…
👁 542 просмотров
Глава от 23.09.2026
🔥 Как ускорить Python-код в 10 раз? Сегодня покажу вам мощный инструмент для оп…
👁 709 просмотров
Глава от 22.09.2026
Контейнеры в одном инструменте, виртуалки — в другом, частное облако — вообще от…
👁 702 просмотров
Глава от 21.09.2026
10 полезных библиотек для Python-разработчика Сегодня я подготовил для вас подб…
👁 827 просмотров
Глава от 17.09.2026
ИТ-сообщество, хватит онлайн-митапов – приходите офлайн. 18 сентября в Москве с…
👁 543 просмотров
Глава от 16.09.2026
Если у вас есть ресурсоемкая задача для процессора и вы хотите использовать все …
👁 1 000 просмотров
Глава от 16.09.2026
Создание кроссплатформенного приложения с GUI на Rust: От идеи до реальности El…
👁 909 просмотров

Популярные посты канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»

Как упростить работу с аргументами в командной строке с помощью typer Раньше для CLI-приложений на Python я использовал argparse, потом был…
👁 8 025 просмотров
Создание объекта в Python включает два ключевых этапа. Сначала вызывается метод __new__, который создаёт и возвращает новый объект. Затем вы…
👁 8 023 просмотров
🚀 Как логировать без боли в Python Как настроить логирование в Python один раз — и больше к этому не возвращаться. Обычно начинающие разра…
👁 7 991 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 983 просмотров
💡 Как избежать повторения кода с помощью functools.partial Как упростить код и избежать дублирования с помощью functools.partial. Допустим…
👁 7 971 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 941 просмотров
В Python оператор квадратных скобок [] можно переопределить, реализовав магический метод __getitem__. Это позволяет, например, создать объек…
👁 7 919 просмотров
Популярный способ объявить абстрактный метод в Python — это выбросить исключение NotImplementedError: def human_name(self): raise NotIm…
👁 7 841 просмотров
Встроенные значения float в Python используют оборудование вашего компьютера напрямую, поэтому любое значение представляется внутренне в вид…
👁 7 817 просмотров
Иногда в программе нужна очередь — контейнер, куда элементы добавляются с одной стороны и извлекаются с другой. В Python для этого можно исп…
👁 7 805 просмотров
Существует два понятия с похожими названиями, которые легко перепутать: переопределение (overriding) и перегрузка (overloading). Переопреде…
👁 7 770 просмотров
Иногда возникает необходимость выполнить участок кода и проигнорировать все возможные исключения. Это оправдано в случае с плагинами, сторон…
👁 7 752 просмотров
⚠️ Можно знать алгоритмы машинного обучения и всё равно получать плохие результаты. Большинство проблем моделей начинаются с некачественной …
👁 7 743 просмотров
Есть три ситуации, в которых только что созданную переменную нельзя аннотировать типом: распаковка кортежей, циклы for и инструкции with. В…
👁 7 701 просмотров
В Python имя переменной может состоять из одного символа подчёркивания: _. Хотя такие имена обычно недостаточно описательны и их не стоит ис…
👁 7 697 просмотров
Некоторый код может выводить интересующие вас данные в stdout, вместо того чтобы предоставлять API, возвращающий строку, пригодную для испол…
👁 7 656 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 624 просмотров
Скрытые фичи Enum: как выжать максимум Многие используют Enum как простой список констант. Но у enum.Enum в Python есть куда больше возможн…
👁 7 620 просмотров
Обычно вы взаимодействуете с генератором, запрашивая данные с помощью next(gen). В Python 3 вы также можете отправлять значения обратно в ге…
👁 7 605 просмотров
Чтобы отсортировать словарь по его значениям, используйте функцию sorted с пользовательской функцией ключа: >>> d = dict(a=1, c=3, b=2) >>>…
👁 7 574 просмотров

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@canalmaxone
AntiCloudMod
👥 365 398 · -8 181/7д
@BelgorodDRONE
Информация БПЛА Белгород, Белгородский район
7924148410
👥 199 576 · +1 320/7д
@biologia89
РОБЛОКС🔷
РОБЛОКС В МАКС! Реклама: https://clck.ru/3Tmmgx
👥 178 967 · -2 064/7д
@WylsacomRed
Wylsacom Red
Официальный канал Wylsacom в Max. Тут всё про технологии и жизнь в ногу со временем! Розыгрыши: kichaev@wylsacom.media По вопросам сотрудничества: https://wylsacom.medi…
👥 172 420 · +4 870/7д
@TikTokModCloud
TikTokModCloud
Официальные обновления стабильного мода TikTok Чат: https://clck.ru/3S6mVh По рекламе: https://iimax.ru/dim4ugan
👥 123 801 · +1 434/7д
@yandex_browser
Яндекс Браузер с Алисой AI
Привет, это канал команды Яндекс Браузера Показываем, как превратить наши технологии в ваши возможности. Скачать Браузер тут: https://browser.yandex.ru/ Наше сообще
👥 78 795 · -865/7д
🏷 Темы и теги
#telegram боты #парсинг сайтов #обучение программированию #backend разработка #python #django #Технологии
📋 О канале Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Учим язык Python на практике. Создание веб-приложений: Django, Flask, FastAPI. Пишем ботов для Телеграм на Aiogram. Парсинг сайтов (Web Scraping): Selenium, BeautifulSoup (BS4), Scrapy. Работа с базами данных (PostgreSQL, Redis, SQL) и API. Асинхронное программирование (Asyncio). Настройка Docker, Git и Linux. Алгоритмы, задачи с собеседований и Roadmap для Junior Python Developer.
🔍 Архив всех постов Макс
Поиск по 17,048,188 постам из 203,915 каналов
Подключить за 490 ₽/мес →
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
📊 Аналитика канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
➕
Добавьте свой канал в каталог
Зарегистрируйтесь в личном кабинете и добавьте канал за пару кликов.
Перейти в личный кабинет →

Бесплатная регистрация, быстрая модерация.