Dataclasses vs обычные классы
Python
Senior
Яндекс
Объясните, что даёт `@dataclass` по сравнению с обычным классом. Какие подводные камни есть при использовании изменяемых значений по умолчанию?
Ответы
Dataclasses
`@dataclass` автоматически генерирует `__init__`, `__repr__`, `__eq__` и опционально другие методы на основе аннотированных полей. Это уменьшает шаблонный код для «контейнеров данных».
Опасность изменяемых значений по умолчанию:
```python
from dataclasses import dataclass
@dataclass
class Config:
flags: list = [] # одна и та же list для всех экземпляров!
```
Правильно использовать `default_factory`:
```python
from dataclasses import field
@dataclass
class Config:
flags: list = field(default_factory=list)
```