Python DataClasses
dataclasses is a module that supports the creation of simple classes.
Contents
Decorators
@DataClass
Use the @dataclass decorator on a class to automatically generate 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 __init__ method
repr: boolean indicating that this field should be included in the generated __repr__ method
hash: boolean indicating that this field should be included in the generated __hash__ method
compare: boolean indicating that this field should be included in the generated comparison methods (e.g. __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 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
Python dataclasses module documentation