В чем сходства между dataclass и namedtuple
Python
Middle
Без компании
В чем сходства между dataclass и namedtuple
Ответы
Оба предоставляют удобный способ создания классов для хранения данных с автоматической генерацией boilerplate-кода.
**Сходства:**
- **Автоматическая генерация методов**: `__init__`, `__repr__`, `__eq__`
- **Иммутабельность**: `namedtuple` по умолчанию неизменяем, `dataclass` можно сделать неизменяемым через `@dataclass(frozen=True)`
- **Доступ по имени атрибутов**: `obj.field`
**Пример:**
```
from collections import namedtuple
from dataclasses import dataclass
# namedtuple
PointNT = namedtuple('PointNT', ['x', 'y'])
# dataclass
@dataclass
class PointDC:
x: int
y: int
p_nt = PointNT(1, 2)
p_dc = PointDC(1, 2)
print(p_nt, p_dc) # PointNT(x=1, y=2) PointDC(x=1, y=2)
```
**Различия:**
- `dataclass` гибче (поддержка дефолтных значений, наследование, mutable/immutable)
- `namedtuple` легковеснее и быстрее, но менее функционален.