= Python DataClasses = '''`dataclasses`''' is a module that supports the creation of simple classes. <> ---- == Decorators == === @DataClass === Use the '''`@dataclass`''' decorator on a class to automatically generate [[Python/DunderMethod|dunder methods]]. {{{ import dataclasses @dataclasses.dataclass class User: name: str # 'name' has no defualt value id: int = 1000 # 'id' defaults to 1000 }}} A `TypeError` is raised if a field without a default value follows a field with a default value. ---- == Classes == === Field === A '''`Field`''' object represents a field in a dataclass. For complex logic, a dataclass can be defined in terms of `Field` objects. A `Field` object is instantiated with the `field()` function. This function takes the following optional named arguments: * `default`: default value * `default_factory`: callable that generates the default value as needed * `init`: boolean indicating that this field should be included in the generated [[Python/DunderMethod#__Init__|__init__]] method * `repr`: boolean indicating that this field should be included in the generated [[Python/DunderMethod#__Repr__|__repr__]] method * `hash`: boolean indicating that this field should be included in the generated [[Python/DunderMethod#__Hash__|__hash__]] method * `compare`: boolean indicating that this field should be included in the generated comparison methods (e.g. [[Python/DunderMethod#__Eq__|__eq__]] and so on) * `kw_only`: boolean indicating that this field is keyword-only A `Field` object has `name` and `type `atributes, as well as attribute matching the names and meanings of the `field()` function's arguments. To create a dataclass with a field that defaults to an empty list, try: {{{ import dataclasses @dataclasses.dataclass class User: groups: list[int] = dataclass.field(default_factory=list) u = User() u.groups += [1, 2, 3] }}} ---- == Functions == === AsDict === {{{ import dataclasses @dataclasses.dataclass class Point: x: int y: int p = Point(10, 20) dataclasses.asdict(p) # {'x': 10, 'y': 20} }}} ---- === AsTuple === {{{ import dataclasses @dataclasses.dataclass class Point: x: int y: int p = Point(10, 20) dataclasses.astuple(p) # (10, 20) }}} ---- === Fields === Extract the `Field` objects from a dataclass. ---- === Is_DataClass === Returns `True` if passed a dataclass. ---- === Make_DataClass === An alternative constructor for dataclasses. ---- === Replace === ---- == Constants == '''`KW_ONLY`''' is a [[Python/TypeAnnotation|type annotation]] used for dataclasses. {{{ import dataclasses @dataclasses.dataclass class Point: x: float _: dataclass.KW_ONLY y: float z: float p = Point(0, y=1.5, z=2.0) }}} '''`MISSING`''' is a sentinel value used internally. ---- == See also == [[https://docs.python.org/3/library/dataclasses.html|Python dataclasses module documentation]] ---- CategoryRicottone