Python 3.7+dataclassesфункция
dataclasses.make_dataclass
фабрика
Создаёт новый класс-dataclass динамически из имени и списка полей.
Синтаксис
dataclasses.make_dataclass(cls_name, fields, *, bases=(), namespace=None, ...)
Нужен редко: если поля известны заранее, обычный декоратор @dataclass читается лучше и виден статическим анализаторам, а make_dataclass строит класс во время выполнения, поэтому IDE о его полях ничего не знает. Элементом списка полей может быть не только имя, но и пара (имя, тип) или тройка с field(); у голого имени тип считается typing.Any. Чтобы экземпляры такого класса пиклились, присвойте результат переменной уровня модуля с тем же именем, что передали первым аргументом.
Примеры
import dataclasses
Pt = dataclasses.make_dataclass('Pt', ['x', 'y'])
print(dataclasses.asdict(Pt(1, 2))) # → {'x': 1, 'y': 2}
print(Pt(1, 2)) # → Pt(x=1, y=2)
print(Pt(1, 2) == Pt(1, 2)) # → True
P2 = dataclasses.make_dataclass('P2', [('x', int), ('y', int, dataclasses.field(default=0))])
print(P2(5)) # → P2(x=5, y=0)
print([f.name for f in dataclasses.fields(P2)]) # → ['x', 'y']
Fz = dataclasses.make_dataclass('Fz', ['v'], frozen=True)
Fz(1).v = 2 # → FrozenInstanceError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности