ENIGMA AI
ENIGMA AI
Python Легкий

Что такое data-классы в Python?

Data Classes в Python

Определение:
Декоратор @dataclass (Python 3.7+) автоматически генерирует специальные методы для классов-контейнеров данных.

Базовый пример:

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int
    email: str = ""  # Значение по умолчанию

# Автоматически создаются:
# __init__, __repr__, __eq__

user = User("Alice", 30)
print(user)  # User(name='Alice', age=30, email='')

Без dataclass:

class User:
    def __init__(self, name: str, age: int, email: str = ""):
        self.name = name
        self.age = age
        self.email = email

    def __repr__(self):
        return f"User(name={self.name!r}, age={self.age!r}, email={self.email!r})"

    def __eq__(self, other):
        if not isinstance(other, User):
            return NotImplemented
        return (self.name, self.age, self.email) == (other.name, other.age, other.email)

Параметры декоратора:

@dataclass(
    init=True,       # Генерировать __init__
    repr=True,       # Генерировать __repr__
    eq=True,         # Генерировать __eq__
    order=False,     # Генерировать __lt__, __le__, etc.
    frozen=False,    # Сделать неизменяемым
    slots=False,     # Использовать __slots__ (3.10+)
)
class Point:
    x: float
    y: float

Frozen (неизменяемый):

@dataclass(frozen=True)
class Point:
    x: float
    y: float

p = Point(1.0, 2.0)
p.x = 3.0  # FrozenInstanceError!

Post-init обработка:

@dataclass
class Rectangle:
    width: float
    height: float
    area: float = field(init=False)

    def __post_init__(self):
        self.area = self.width * self.height

field() для настройки:

from dataclasses import dataclass, field

@dataclass
class Config:
    items: list = field(default_factory=list)  # Мутабельный default
    internal: str = field(repr=False)  # Не показывать в repr
    computed: int = field(init=False)  # Не в __init__

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы