📝 Резюме · 🧾 Транскрипт (формат) · 📄 Оригинал (904 B)
https://t.me/Python_libr/3464

Быстрое создание классов‑данных в Python через @dataclass

Источник: https://t.me/Python_libr/3464

Краткое содержание

Короткий обучающий пост канала Python Libr про декоратор @dataclass из стандартного модуля dataclasses. Декоратор автоматически генерирует методы __init__, __eq__, __repr__ (в посте упомянуто __str__), __hash__ и ряд других на основе аннотаций типов, объявленных в теле класса. Это позволяет описывать «контейнеры данных» минимумом кода. Подчёркивается, что поля без аннотации типа игнорируются — только аннотированные атрибуты попадают в сгенерированный конструктор.

Иллюстрация

Минимальный пример: класс‑контейнер для координаты с автоматически собранным __init__ и читаемым __repr__:

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float
    label: str = "origin"   # значение по умолчанию

p = Point(1.0, 2.0)
print(p)            # Point(x=1.0, y=2.0, label='origin')
print(p == Point(1.0, 2.0))  # True — __eq__ сгенерирован автоматически

# Поле без аннотации типа НЕ становится полем dataclass:
@dataclass
class Bad:
    x: int
    y = 0           # пропускается генератором, останется обычным атрибутом класса

Полезные опции декоратора, не упомянутые в посте, но обычно сопутствующие теме: frozen=True делает экземпляры неизменяемыми и пригодными в качестве ключей словарей/элементов множеств; kw_only=True (Python 3.10+) запрещает позиционную инициализацию; field(default_factory=list) корректно задаёт изменяемые значения по умолчанию.

Значимость

Заметка — короткий учебный «карточный» пост (#урок) о повседневном инструменте стандартной библиотеки. Это типовой материал канала: разбор отдельной фичи без претензии на полноту. Полезен новичкам как точка входа в dataclasses; для практической работы стоит дочитать официальную документацию модуля, ссылку на которую канал даёт в исходном посте.

🧾 Транскрипт (формат)

📌 Быстро создаём классы с данными

Источник: https://t.me/Python_libr/3464

📌 Быстро создаём классы с данными

Декоратор @dataclass из модуля dataclasses автоматизирует создание методов __init__, __eq__, __str__, __hash__ и других на основе типов, которые переданы в начале.

Таким образом мы можем быстро создавать объекты с каким-то набором данных, при этом написав минимум кода.

Также стоит отметить, что все значения должны иметь тип, иначе они будут проигнорированы.

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

#урок