lib.dataclasses.*

class lib.dataclasses.Field(default, default_factory, init, repr, hash, compare, metadata)[source]

Bases: object

_field_type
compare
default
default_factory
hash
init
metadata
name
repr
type
exception lib.dataclasses.FrozenInstanceError[source]

Bases: AttributeError

class lib.dataclasses.InitVar[source]

Bases: object

lib.dataclasses.asdict(obj, *, dict_factory=<class 'dict'>)[source]

Return the fields of a dataclass instance as a new dictionary mapping field names to field values.

Example usage:

@dataclass class C:

x: int y: int

c = C(1, 2) assert asdict(c) == {‘x’: 1, ‘y’: 2}

If given, ‘dict_factory’ will be used instead of built-in dict. The function applies recursively to field values that are dataclass instances. This will also look into built-in containers: tuples, lists, and dicts.

lib.dataclasses.astuple(obj, *, tuple_factory=<class 'tuple'>)[source]

Return the fields of a dataclass instance as a new tuple of field values.

Example usage:

@dataclass
class C:
    x: int
    y: int

c = C(1, 2) assert astuple(c) == (1, 2)

If given, ‘tuple_factory’ will be used instead of built-in tuple. The function applies recursively to field values that are dataclass instances. This will also look into built-in containers: tuples, lists, and dicts.

lib.dataclasses.dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)[source]

Returns the same class as was passed in, with dunder methods added based on the fields defined in the class.

Examines PEP 526 __annotations__ to determine fields.

If init is true, an __init__() method is added to the class. If repr is true, a __repr__() method is added. If order is true, rich comparison dunder methods are added. If unsafe_hash is true, a __hash__() method function is added. If frozen is true, fields may not be assigned to after instance creation.

lib.dataclasses.field(*, default=<lib.dataclasses._MISSING_TYPE object>, default_factory=<lib.dataclasses._MISSING_TYPE object>, init=True, repr=True, hash=None, compare=True, metadata=None)[source]

Return an object to identify dataclass fields.

default is the default value of the field. default_factory is a 0-argument function called to initialize a field’s value. If init is True, the field will be a parameter to the class’s __init__() function. If repr is True, the field will be included in the object’s repr(). If hash is True, the field will be included in the object’s hash(). If compare is True, the field will be used in comparison functions. metadata, if specified, must be a mapping which is stored but not otherwise examined by dataclass.

It is an error to specify both default and default_factory.

lib.dataclasses.fields(class_or_instance)[source]

Return a tuple describing the fields of this dataclass.

Accepts a dataclass or an instance of one. Tuple elements are of type Field.

lib.dataclasses.is_dataclass(obj)[source]

Returns True if obj is a dataclass or an instance of a dataclass.

lib.dataclasses.make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)[source]

Return a new dynamically created dataclass.

The dataclass name will be ‘cls_name’. ‘fields’ is an iterable of either (name), (name, type) or (name, type, Field) objects. If type is omitted, use the string ‘typing.Any’. Field objects are created by the equivalent of calling ‘field(name, type [, Field-info])’.

C = make_dataclass(‘C’, [‘x’, (‘y’, int), (‘z’, int, field(init=False))], bases=(Base,))

is equivalent to:

@dataclass class C(Base):

x: ‘typing.Any’ y: int z: int = field(init=False)

For the bases and namespace parameters, see the builtin type() function.

The parameters init, repr, eq, order, unsafe_hash, and frozen are passed to dataclass().

lib.dataclasses.replace(obj, **changes)[source]

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@dataclass(frozen=True) class C:

x: int y: int

c = C(1, 2) c1 = replace(c, x=3) assert c1.x == 3 and c1.y == 2