Python Glossary English

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Сообщить о неточности