import dataclasses dataclasses.make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
cls_name
- имя класса данных,fields
- атрибуты класса данных,bases=()
- базовые классы,namespace=None
- пространство имен, init=True
- флаг для создания метода __init__()
,repr=True
- флаг для создания метода __repr__()
,eq=True
- флаг для создания метода __eq__()
,order=False
- флаг для создания методов сравнения класса, unsafe_hash=False
- флаг для создания метода __hash__()
,frozen=False
- флаг для создания неизменяемого типа.Функция make_dataclass()
модуля dataclasses
создает новый класс данных с именем cls_name
; полями, как определено аргументом fields
; базовыми классами, как указано в bases
, и инициализируется пространством имен, как указано в namespace
.
Аргумент fields
является итерируемым, каждый из элементов которого представляет собой: name
или (name, type)
или (имя, тип, поле)
.
Если указано только имя name
, то для его типа используется аннотация typing.Any
.
Значения init
, repr
, eq
, order
, unsafe_hash
и frozen
имеют то же значение, что и для декоратора @dataclass()
.
Эта функция не является строго обязательной, поскольку любой механизм Python для создания нового класса с __annotations__
может затем применить функцию-декоратор dataclasses.dataclass()
для преобразования этого класса в класс данных. Эта функция предоставляется для удобства.
C = make_dataclass('C', [('x', int), 'y', ('z', int, field(default=5))], namespace={'add_one': lambda self: self.x + 1})
Эквивалентно:
@dataclass class C: x: int y: 'typing.Any' z: int = 5 def add_one(self): return self.x + 1