|
Size: 1545
Comment:
|
Size: 3089
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 10: | Line 10: |
| == Usage == | == Decorators == |
| Line 16: | Line 16: |
| Decorate a class to generate [[Python/DunderMethod|additional methods]]. | Use the '''`@dataclass`''' decorator on a class to automatically generate [[Python/DunderMethod|dunder methods]]. |
| Line 19: | Line 19: |
| import dataclass | import dataclasses |
| Line 21: | Line 21: |
| @dataclass.dataclass | @dataclasses.dataclass |
| Line 33: | Line 33: |
| === AsDict === ---- === AsTuple === ---- |
== Classes == |
| Line 47: | Line 39: |
| Create more complicated default behaviors for dataclass fields. | A '''`Field`''' object represents a field in a dataclass. For complex logic, a dataclass can be defined in terms of `Field` objects. |
| Line 49: | Line 41: |
| To create a field that defaults to an empty list, try: | 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: |
| Line 52: | Line 56: |
| import dataclass | import dataclasses |
| Line 54: | Line 58: |
| @dataclass.dataclass | @dataclasses.dataclass |
| Line 66: | Line 70: |
| == 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) }}} ---- |
|
| Line 67: | Line 111: |
Extract the `Field` objects from a dataclass. |
|
| Line 78: | Line 124: |
| === KW_Only === A [[Python/TypeAnnotation|type annotation]] used for dataclasses. {{{ import dataclass @dataclass.dataclass class Point: x: float _: dataclass.KW_ONLY y: float z: float p = Point(0, y=1.5, z=2.0) }}} ---- |
|
| Line 100: | Line 125: |
---- === Missing === `dataclass.MISSING` is a sentinel value used internally. |
|
| Line 119: | Line 136: |
| == 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. ---- |
|
| Line 122: | Line 162: |
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 1000A 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
Make_DataClass
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
