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 — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно