blob: 1a7fed9af81871a0cf9c396a4fc73880782817f6 [file] [log] [blame]
Eric V. Smith7a1c0272018-05-16 09:29:05 -04001:mod:`dataclasses` --- Data Classes
2===================================
Eric V. Smith98d50cb2018-05-16 04:20:43 -04003
4.. module:: dataclasses
Eric V. Smith7a1c0272018-05-16 09:29:05 -04005 :synopsis: Generate special methods on user-defined classes.
Eric V. Smith98d50cb2018-05-16 04:20:43 -04006
7.. moduleauthor:: Eric V. Smith <eric@trueblade.com>
8.. sectionauthor:: Eric V. Smith <eric@trueblade.com>
9
10**Source code:** :source:`Lib/dataclasses.py`
11
12--------------
13
14This module provides a decorator and functions for automatically
15adding generated :term:`special method`\s such as :meth:`__init__` and
16:meth:`__repr__` to user-defined classes. It was originally described
17in :pep:`557`.
18
19The member variables to use in these generated methods are defined
20using :pep:`526` type annotations. For example this code::
21
Ned Batchelder2effef72020-05-08 07:39:57 -040022 from dataclasses import dataclass
23
Eric V. Smith98d50cb2018-05-16 04:20:43 -040024 @dataclass
25 class InventoryItem:
marload61bb24a2020-07-09 21:13:47 +090026 """Class for keeping track of an item in inventory."""
Eric V. Smith98d50cb2018-05-16 04:20:43 -040027 name: str
28 unit_price: float
29 quantity_on_hand: int = 0
30
31 def total_cost(self) -> float:
32 return self.unit_price * self.quantity_on_hand
33
34Will add, among other things, a :meth:`__init__` that looks like::
35
Mohamed Moselhye726a902021-04-30 19:06:55 -040036 def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
Eric V. Smith98d50cb2018-05-16 04:20:43 -040037 self.name = name
38 self.unit_price = unit_price
39 self.quantity_on_hand = quantity_on_hand
40
41Note that this method is automatically added to the class: it is not
42directly specified in the ``InventoryItem`` definition shown above.
43
44.. versionadded:: 3.7
45
Eric V. Smith821f0c82021-05-02 21:20:50 -040046Module contents
47---------------
Eric V. Smith98d50cb2018-05-16 04:20:43 -040048
Yurii Karabasc2419912021-05-01 05:14:30 +030049.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False)
Eric V. Smith98d50cb2018-05-16 04:20:43 -040050
51 This function is a :term:`decorator` that is used to add generated
52 :term:`special method`\s to classes, as described below.
53
54 The :func:`dataclass` decorator examines the class to find
55 ``field``\s. A ``field`` is defined as class variable that has a
Cheryl Sabellab7105c92018-12-24 00:09:09 -050056 :term:`type annotation <variable annotation>`. With two
57 exceptions described below, nothing in :func:`dataclass`
58 examines the type specified in the variable annotation.
Eric V. Smith98d50cb2018-05-16 04:20:43 -040059
60 The order of the fields in all of the generated methods is the
61 order in which they appear in the class definition.
62
63 The :func:`dataclass` decorator will add various "dunder" methods to
64 the class, described below. If any of the added methods already
Fabio Sangiovannie28aff52019-12-25 23:45:30 +010065 exist on the class, the behavior depends on the parameter, as documented
66 below. The decorator returns the same class that is called on; no new
67 class is created.
Eric V. Smith98d50cb2018-05-16 04:20:43 -040068
69 If :func:`dataclass` is used just as a simple decorator with no parameters,
70 it acts as if it has the default values documented in this
71 signature. That is, these three uses of :func:`dataclass` are
72 equivalent::
73
74 @dataclass
75 class C:
76 ...
77
78 @dataclass()
79 class C:
80 ...
81
Yurii Karabasc2419912021-05-01 05:14:30 +030082 @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False)
Eric V. Smith98d50cb2018-05-16 04:20:43 -040083 class C:
84 ...
85
86 The parameters to :func:`dataclass` are:
87
88 - ``init``: If true (the default), a :meth:`__init__` method will be
89 generated.
90
91 If the class already defines :meth:`__init__`, this parameter is
92 ignored.
93
94 - ``repr``: If true (the default), a :meth:`__repr__` method will be
95 generated. The generated repr string will have the class name and
96 the name and repr of each field, in the order they are defined in
97 the class. Fields that are marked as being excluded from the repr
98 are not included. For example:
99 ``InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)``.
100
101 If the class already defines :meth:`__repr__`, this parameter is
102 ignored.
103
104 - ``eq``: If true (the default), an :meth:`__eq__` method will be
105 generated. This method compares the class as if it were a tuple
106 of its fields, in order. Both instances in the comparison must
107 be of the identical type.
108
109 If the class already defines :meth:`__eq__`, this parameter is
110 ignored.
111
112 - ``order``: If true (the default is ``False``), :meth:`__lt__`,
113 :meth:`__le__`, :meth:`__gt__`, and :meth:`__ge__` methods will be
114 generated. These compare the class as if it were a tuple of its
115 fields, in order. Both instances in the comparison must be of the
116 identical type. If ``order`` is true and ``eq`` is false, a
117 :exc:`ValueError` is raised.
118
119 If the class already defines any of :meth:`__lt__`,
120 :meth:`__le__`, :meth:`__gt__`, or :meth:`__ge__`, then
Fabio Sangiovannie28aff52019-12-25 23:45:30 +0100121 :exc:`TypeError` is raised.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400122
Barry Warsaw713a9362018-05-16 15:50:07 -0400123 - ``unsafe_hash``: If ``False`` (the default), a :meth:`__hash__` method
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400124 is generated according to how ``eq`` and ``frozen`` are set.
125
Barry Warsaw713a9362018-05-16 15:50:07 -0400126 :meth:`__hash__` is used by built-in :meth:`hash()`, and when objects are
127 added to hashed collections such as dictionaries and sets. Having a
128 :meth:`__hash__` implies that instances of the class are immutable.
129 Mutability is a complicated property that depends on the programmer's
130 intent, the existence and behavior of :meth:`__eq__`, and the values of
131 the ``eq`` and ``frozen`` flags in the :func:`dataclass` decorator.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400132
Barry Warsaw713a9362018-05-16 15:50:07 -0400133 By default, :func:`dataclass` will not implicitly add a :meth:`__hash__`
134 method unless it is safe to do so. Neither will it add or change an
135 existing explicitly defined :meth:`__hash__` method. Setting the class
136 attribute ``__hash__ = None`` has a specific meaning to Python, as
137 described in the :meth:`__hash__` documentation.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400138
Guilherme Martins Crocetti05540442021-03-08 19:50:39 -0300139 If :meth:`__hash__` is not explicitly defined, or if it is set to ``None``,
Barry Warsaw713a9362018-05-16 15:50:07 -0400140 then :func:`dataclass` *may* add an implicit :meth:`__hash__` method.
141 Although not recommended, you can force :func:`dataclass` to create a
142 :meth:`__hash__` method with ``unsafe_hash=True``. This might be the case
143 if your class is logically immutable but can nonetheless be mutated.
144 This is a specialized use case and should be considered carefully.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400145
Barry Warsaw713a9362018-05-16 15:50:07 -0400146 Here are the rules governing implicit creation of a :meth:`__hash__`
147 method. Note that you cannot both have an explicit :meth:`__hash__`
148 method in your dataclass and set ``unsafe_hash=True``; this will result
149 in a :exc:`TypeError`.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400150
Barry Warsaw713a9362018-05-16 15:50:07 -0400151 If ``eq`` and ``frozen`` are both true, by default :func:`dataclass` will
152 generate a :meth:`__hash__` method for you. If ``eq`` is true and
153 ``frozen`` is false, :meth:`__hash__` will be set to ``None``, marking it
154 unhashable (which it is, since it is mutable). If ``eq`` is false,
155 :meth:`__hash__` will be left untouched meaning the :meth:`__hash__`
156 method of the superclass will be used (if the superclass is
157 :class:`object`, this means it will fall back to id-based hashing).
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400158
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200159 - ``frozen``: If true (the default is ``False``), assigning to fields will
Barry Warsaw713a9362018-05-16 15:50:07 -0400160 generate an exception. This emulates read-only frozen instances. If
161 :meth:`__setattr__` or :meth:`__delattr__` is defined in the class, then
162 :exc:`TypeError` is raised. See the discussion below.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400163
Eric V. Smith750f4842021-04-10 21:28:42 -0400164 - ``match_args``: If true (the default is ``True``), the
165 ``__match_args__`` tuple will be created from the list of
166 parameters to the generated :meth:`__init__` method (even if
167 :meth:`__init__` is not generated, see above). If false, or if
168 ``__match_args__`` is already defined in the class, then
169 ``__match_args__`` will not be generated.
170
Shreyan Avigyana5eabc92021-05-02 21:13:50 +0530171 .. versionadded:: 3.10
172
Eric V. Smithc0280532021-04-25 20:42:39 -0400173 - ``kw_only``: If true (the default value is ``False``), then all
Eric V. Smith2f59a762021-05-01 19:51:12 -0400174 fields will be marked as keyword-only. If a field is marked as
175 keyword-only, then the only affect is that the :meth:`__init__`
176 parameter generated from a keyword-only field must be specified
177 with a keyword when :meth:`__init__` is called. There is no
178 effect on any other aspect of dataclasses. See the
179 :term:`parameter` glossary entry for details. Also see the
Eric V. Smith821f0c82021-05-02 21:20:50 -0400180 :const:`KW_ONLY` section.
Eric V. Smith750f4842021-04-10 21:28:42 -0400181
Shreyan Avigyana5eabc92021-05-02 21:13:50 +0530182 .. versionadded:: 3.10
183
Yurii Karabasc2419912021-05-01 05:14:30 +0300184 - ``slots``: If true (the default is ``False``), :attr:`__slots__` attribute
185 will be generated and new class will be returned instead of the original one.
186 If :attr:`__slots__` is already defined in the class, then :exc:`TypeError`
187 is raised.
188
Shreyan Avigyana5eabc92021-05-02 21:13:50 +0530189 .. versionadded:: 3.10
190
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400191 ``field``\s may optionally specify a default value, using normal
192 Python syntax::
193
194 @dataclass
195 class C:
196 a: int # 'a' has no default value
197 b: int = 0 # assign a default value for 'b'
198
199 In this example, both ``a`` and ``b`` will be included in the added
200 :meth:`__init__` method, which will be defined as::
201
202 def __init__(self, a: int, b: int = 0):
203
204 :exc:`TypeError` will be raised if a field without a default value
205 follows a field with a default value. This is true either when this
206 occurs in a single class, or as a result of class inheritance.
207
Eric V. Smith2f59a762021-05-01 19:51:12 -0400208.. function:: field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING):
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400209
210 For common and simple use cases, no other functionality is
Barry Warsaw713a9362018-05-16 15:50:07 -0400211 required. There are, however, some dataclass features that
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400212 require additional per-field information. To satisfy this need for
213 additional information, you can replace the default field value
214 with a call to the provided :func:`field` function. For example::
215
216 @dataclass
217 class C:
Andre Delfino7f54e562020-10-03 19:10:59 -0300218 mylist: list[int] = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400219
220 c = C()
Barry Warsaw713a9362018-05-16 15:50:07 -0400221 c.mylist += [1, 2, 3]
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400222
Eric V. Smith821f0c82021-05-02 21:20:50 -0400223 As shown above, the :const:`MISSING` value is a sentinel object used to
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400224 detect if the ``default`` and ``default_factory`` parameters are
225 provided. This sentinel is used because ``None`` is a valid value
Eric V. Smith821f0c82021-05-02 21:20:50 -0400226 for ``default``. No code should directly use the :const:`MISSING`
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400227 value.
228
229 The parameters to :func:`field` are:
230
231 - ``default``: If provided, this will be the default value for this
232 field. This is needed because the :meth:`field` call itself
233 replaces the normal position of the default value.
234
235 - ``default_factory``: If provided, it must be a zero-argument
236 callable that will be called when a default value is needed for
237 this field. Among other purposes, this can be used to specify
238 fields with mutable default values, as discussed below. It is an
239 error to specify both ``default`` and ``default_factory``.
240
241 - ``init``: If true (the default), this field is included as a
242 parameter to the generated :meth:`__init__` method.
243
244 - ``repr``: If true (the default), this field is included in the
245 string returned by the generated :meth:`__repr__` method.
246
Barry Warsaw713a9362018-05-16 15:50:07 -0400247 - ``hash``: This can be a bool or ``None``. If true, this field is
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400248 included in the generated :meth:`__hash__` method. If ``None`` (the
249 default), use the value of ``compare``: this would normally be
250 the expected behavior. A field should be considered in the hash
251 if it's used for comparisons. Setting this value to anything
252 other than ``None`` is discouraged.
253
254 One possible reason to set ``hash=False`` but ``compare=True``
255 would be if a field is expensive to compute a hash value for,
256 that field is needed for equality testing, and there are other
257 fields that contribute to the type's hash value. Even if a field
258 is excluded from the hash, it will still be used for comparisons.
259
Eric V. Smith2f59a762021-05-01 19:51:12 -0400260 - ``compare``: If true (the default), this field is included in the
261 generated equality and comparison methods (:meth:`__eq__`,
262 :meth:`__gt__`, et al.).
263
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400264 - ``metadata``: This can be a mapping or None. None is treated as
265 an empty dict. This value is wrapped in
266 :func:`~types.MappingProxyType` to make it read-only, and exposed
267 on the :class:`Field` object. It is not used at all by Data
268 Classes, and is provided as a third-party extension mechanism.
269 Multiple third-parties can each have their own key, to use as a
270 namespace in the metadata.
271
Eric V. Smith2f59a762021-05-01 19:51:12 -0400272 - ``kw_only``: If true, this field will be marked as keyword-only.
273 This is used when the generated :meth:`__init__` method's
274 parameters are computed.
275
Shreyan Avigyana5eabc92021-05-02 21:13:50 +0530276 .. versionadded:: 3.10
277
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400278 If the default value of a field is specified by a call to
279 :func:`field()`, then the class attribute for this field will be
280 replaced by the specified ``default`` value. If no ``default`` is
281 provided, then the class attribute will be deleted. The intent is
282 that after the :func:`dataclass` decorator runs, the class
283 attributes will all contain the default values for the fields, just
284 as if the default value itself were specified. For example,
285 after::
286
287 @dataclass
288 class C:
289 x: int
290 y: int = field(repr=False)
291 z: int = field(repr=False, default=10)
292 t: int = 20
293
294 The class attribute ``C.z`` will be ``10``, the class attribute
295 ``C.t`` will be ``20``, and the class attributes ``C.x`` and
296 ``C.y`` will not be set.
297
298.. class:: Field
299
300 :class:`Field` objects describe each defined field. These objects
301 are created internally, and are returned by the :func:`fields`
302 module-level method (see below). Users should never instantiate a
303 :class:`Field` object directly. Its documented attributes are:
304
305 - ``name``: The name of the field.
306
307 - ``type``: The type of the field.
308
309 - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``,
310 ``compare``, and ``metadata`` have the identical meaning and
311 values as they do in the :func:`field` declaration.
312
313 Other attributes may exist, but they are private and must not be
314 inspected or relied on.
315
316.. function:: fields(class_or_instance)
317
Barry Warsaw713a9362018-05-16 15:50:07 -0400318 Returns a tuple of :class:`Field` objects that define the fields for this
319 dataclass. Accepts either a dataclass, or an instance of a dataclass.
320 Raises :exc:`TypeError` if not passed a dataclass or instance of one.
321 Does not return pseudo-fields which are ``ClassVar`` or ``InitVar``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400322
323.. function:: asdict(instance, *, dict_factory=dict)
324
Barry Warsaw713a9362018-05-16 15:50:07 -0400325 Converts the dataclass ``instance`` to a dict (by using the
326 factory function ``dict_factory``). Each dataclass is converted
327 to a dict of its fields, as ``name: value`` pairs. dataclasses, dicts,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400328 lists, and tuples are recursed into. For example::
329
330 @dataclass
331 class Point:
332 x: int
333 y: int
334
335 @dataclass
336 class C:
Andre Delfino7f54e562020-10-03 19:10:59 -0300337 mylist: list[Point]
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400338
339 p = Point(10, 20)
340 assert asdict(p) == {'x': 10, 'y': 20}
341
342 c = C([Point(0, 0), Point(10, 4)])
Barry Warsaw713a9362018-05-16 15:50:07 -0400343 assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400344
Barry Warsaw713a9362018-05-16 15:50:07 -0400345 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400346
방성범 (Bang Seongbeom)508d8202018-09-29 19:50:31 +0900347.. function:: astuple(instance, *, tuple_factory=tuple)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400348
Barry Warsaw713a9362018-05-16 15:50:07 -0400349 Converts the dataclass ``instance`` to a tuple (by using the
350 factory function ``tuple_factory``). Each dataclass is converted
351 to a tuple of its field values. dataclasses, dicts, lists, and
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400352 tuples are recursed into.
353
354 Continuing from the previous example::
355
356 assert astuple(p) == (10, 20)
357 assert astuple(c) == ([(0, 0), (10, 4)],)
358
Barry Warsaw713a9362018-05-16 15:50:07 -0400359 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400360
Yurii Karabasc2419912021-05-01 05:14:30 +0300361.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400362
Barry Warsaw713a9362018-05-16 15:50:07 -0400363 Creates a new dataclass with name ``cls_name``, fields as defined
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400364 in ``fields``, base classes as given in ``bases``, and initialized
365 with a namespace as given in ``namespace``. ``fields`` is an
366 iterable whose elements are each either ``name``, ``(name, type)``,
367 or ``(name, type, Field)``. If just ``name`` is supplied,
368 ``typing.Any`` is used for ``type``. The values of ``init``,
Eric V. Smithc0280532021-04-25 20:42:39 -0400369 ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``,
Yurii Karabasc2419912021-05-01 05:14:30 +0300370 ``match_args``, ``kw_only``, and ``slots`` have the same meaning as
371 they do in :func:`dataclass`.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400372
373 This function is not strictly required, because any Python
374 mechanism for creating a new class with ``__annotations__`` can
375 then apply the :func:`dataclass` function to convert that class to
Barry Warsaw713a9362018-05-16 15:50:07 -0400376 a dataclass. This function is provided as a convenience. For
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400377 example::
378
379 C = make_dataclass('C',
380 [('x', int),
381 'y',
382 ('z', int, field(default=5))],
383 namespace={'add_one': lambda self: self.x + 1})
384
385 Is equivalent to::
386
387 @dataclass
388 class C:
389 x: int
390 y: 'typing.Any'
391 z: int = 5
392
393 def add_one(self):
394 return self.x + 1
395
Serhiy Storchaka2d88e632019-06-26 19:07:44 +0300396.. function:: replace(instance, /, **changes)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400397
398 Creates a new object of the same type of ``instance``, replacing
399 fields with values from ``changes``. If ``instance`` is not a Data
400 Class, raises :exc:`TypeError`. If values in ``changes`` do not
401 specify fields, raises :exc:`TypeError`.
402
403 The newly returned object is created by calling the :meth:`__init__`
Barry Warsaw713a9362018-05-16 15:50:07 -0400404 method of the dataclass. This ensures that
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400405 :meth:`__post_init__`, if present, is also called.
406
407 Init-only variables without default values, if any exist, must be
408 specified on the call to :func:`replace` so that they can be passed to
409 :meth:`__init__` and :meth:`__post_init__`.
410
Barry Warsaw713a9362018-05-16 15:50:07 -0400411 It is an error for ``changes`` to contain any fields that are
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400412 defined as having ``init=False``. A :exc:`ValueError` will be raised
413 in this case.
414
415 Be forewarned about how ``init=False`` fields work during a call to
416 :func:`replace`. They are not copied from the source object, but
417 rather are initialized in :meth:`__post_init__`, if they're
418 initialized at all. It is expected that ``init=False`` fields will
419 be rarely and judiciously used. If they are used, it might be wise
420 to have alternate class constructors, or perhaps a custom
421 ``replace()`` (or similarly named) method which handles instance
422 copying.
423
424.. function:: is_dataclass(class_or_instance)
425
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200426 Return ``True`` if its parameter is a dataclass or an instance of one,
427 otherwise return ``False``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400428
429 If you need to know if a class is an instance of a dataclass (and
430 not a dataclass itself), then add a further check for ``not
431 isinstance(obj, type)``::
432
433 def is_dataclass_instance(obj):
434 return is_dataclass(obj) and not isinstance(obj, type)
435
Eric V. Smith821f0c82021-05-02 21:20:50 -0400436.. data:: MISSING
437
438 A sentinel value signifying a missing default or default_factory.
439
440.. data:: KW_ONLY
441
442 A sentinel value used a type annotation. Any fields after a
443 pseudo-field with the type of :const:`KW_ONLY` are marked as
444 keyword-only fields. Note that a pseudo-field of type
445 :const:`KW_ONLY` is otherwise completely ignored. This includes the
446 name of such a field. By convention, a name of `_` is used for a
447 :const:`KW_ONLY` field. Keyword-only fields signify
448 :meth:`__init__` parameters that must be specified as keywords when
449 the class is instantiated.
450
451 In this example, the fields ``y`` and ``z`` will be marked as keyword-only fields::
452
453 @dataclass
454 class Point:
455 x: float
456 _: KW_ONLY
457 y: float
458 z: float
459
460 p = Point(0, y=1.5, z=2.0)
461
462.. exception:: FrozenInstanceError
463
464 Raised when an implicitly defined :meth:`__setattr__` or
465 :meth:`__delattr__` is called on a dataclass which was defined with
466 ``frozen=True``. It is a subclass of :exc:`AttributeError`.
467
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400468Post-init processing
469--------------------
470
471The generated :meth:`__init__` code will call a method named
472:meth:`__post_init__`, if :meth:`__post_init__` is defined on the
473class. It will normally be called as ``self.__post_init__()``.
474However, if any ``InitVar`` fields are defined, they will also be
Barry Warsaw713a9362018-05-16 15:50:07 -0400475passed to :meth:`__post_init__` in the order they were defined in the
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400476class. If no :meth:`__init__` method is generated, then
477:meth:`__post_init__` will not automatically be called.
478
479Among other uses, this allows for initializing field values that
480depend on one or more other fields. For example::
481
482 @dataclass
483 class C:
484 a: float
485 b: float
486 c: float = field(init=False)
487
488 def __post_init__(self):
489 self.c = self.a + self.b
490
491See the section below on init-only variables for ways to pass
492parameters to :meth:`__post_init__`. Also see the warning about how
493:func:`replace` handles ``init=False`` fields.
494
495Class variables
496---------------
497
498One of two places where :func:`dataclass` actually inspects the type
499of a field is to determine if a field is a class variable as defined
500in :pep:`526`. It does this by checking if the type of the field is
501``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded
Barry Warsaw713a9362018-05-16 15:50:07 -0400502from consideration as a field and is ignored by the dataclass
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400503mechanisms. Such ``ClassVar`` pseudo-fields are not returned by the
504module-level :func:`fields` function.
505
506Init-only variables
507-------------------
508
509The other place where :func:`dataclass` inspects a type annotation is to
510determine if a field is an init-only variable. It does this by seeing
511if the type of a field is of type ``dataclasses.InitVar``. If a field
512is an ``InitVar``, it is considered a pseudo-field called an init-only
513field. As it is not a true field, it is not returned by the
514module-level :func:`fields` function. Init-only fields are added as
515parameters to the generated :meth:`__init__` method, and are passed to
516the optional :meth:`__post_init__` method. They are not otherwise used
Barry Warsaw713a9362018-05-16 15:50:07 -0400517by dataclasses.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400518
Daniel Dương075b3c32018-08-24 16:19:24 +0700519For example, suppose a field will be initialized from a database, if a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400520value is not provided when creating the class::
521
522 @dataclass
523 class C:
524 i: int
525 j: int = None
526 database: InitVar[DatabaseType] = None
527
528 def __post_init__(self, database):
529 if self.j is None and database is not None:
530 self.j = database.lookup('j')
531
532 c = C(10, database=my_database)
533
534In this case, :func:`fields` will return :class:`Field` objects for ``i`` and
535``j``, but not for ``database``.
536
537Frozen instances
538----------------
539
540It is not possible to create truly immutable Python objects. However,
541by passing ``frozen=True`` to the :meth:`dataclass` decorator you can
Barry Warsaw713a9362018-05-16 15:50:07 -0400542emulate immutability. In that case, dataclasses will add
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400543:meth:`__setattr__` and :meth:`__delattr__` methods to the class. These
544methods will raise a :exc:`FrozenInstanceError` when invoked.
545
546There is a tiny performance penalty when using ``frozen=True``:
547:meth:`__init__` cannot use simple assignment to initialize fields, and
548must use :meth:`object.__setattr__`.
549
550Inheritance
551-----------
552
Barry Warsaw713a9362018-05-16 15:50:07 -0400553When the dataclass is being created by the :meth:`dataclass` decorator,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400554it looks through all of the class's base classes in reverse MRO (that
Barry Warsaw713a9362018-05-16 15:50:07 -0400555is, starting at :class:`object`) and, for each dataclass that it finds,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400556adds the fields from that base class to an ordered mapping of fields.
557After all of the base class fields are added, it adds its own fields
558to the ordered mapping. All of the generated methods will use this
559combined, calculated ordered mapping of fields. Because the fields
560are in insertion order, derived classes override base classes. An
561example::
562
563 @dataclass
564 class Base:
565 x: Any = 15.0
566 y: int = 0
567
568 @dataclass
569 class C(Base):
570 z: int = 10
571 x: int = 15
572
573The final list of fields is, in order, ``x``, ``y``, ``z``. The final
574type of ``x`` is ``int``, as specified in class ``C``.
575
576The generated :meth:`__init__` method for ``C`` will look like::
577
578 def __init__(self, x: int = 15, y: int = 0, z: int = 10):
579
Eric V. Smith318ca172021-05-01 21:46:05 -0400580Re-ordering of keyword-only parameters in :meth:`__init__`
581----------------------------------------------------------
Eric V. Smithc0280532021-04-25 20:42:39 -0400582
Eric V. Smith2f59a762021-05-01 19:51:12 -0400583After the parameters needed for :meth:`__init__` are computed, any
Eric V. Smith318ca172021-05-01 21:46:05 -0400584keyword-only parameters are moved to come after all regular
Eric V. Smith821f0c82021-05-02 21:20:50 -0400585(non-keyword-only) parameters. In this example, ``Base.y``,
586``Base.w``, and ``D.t`` are keyword-only fields, and ``Base.x`` and
587``D.z`` are regular fields::
Eric V. Smithc0280532021-04-25 20:42:39 -0400588
589 @dataclass
590 class Base:
591 x: Any = 15.0
592 _: KW_ONLY
593 y: int = 0
Eric V. Smith2f59a762021-05-01 19:51:12 -0400594 w: int = 1
Eric V. Smithc0280532021-04-25 20:42:39 -0400595
596 @dataclass
597 class D(Base):
598 z: int = 10
599 t: int = field(kw_only=True, default=0)
600
601The generated :meth:`__init__` method for ``D`` will look like::
602
Eric V. Smith2f59a762021-05-01 19:51:12 -0400603 def __init__(self, x: Any = 15.0, z: int = 10, *, y: int = 0, w: int = 1, t: int = 0):
Eric V. Smithc0280532021-04-25 20:42:39 -0400604
Eric V. Smith2f59a762021-05-01 19:51:12 -0400605Note that the parameters have been re-ordered from how they appear in
606the list of fields: parameters derived from regular fields are
607followed by parameters derived from keyword-only fields.
608
Eric V. Smith318ca172021-05-01 21:46:05 -0400609The relative ordering of keyword-only parameters is maintained in the
610re-ordered :meth:`__init__` parameter list.
Eric V. Smithc0280532021-04-25 20:42:39 -0400611
612
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400613Default factory functions
614-------------------------
615
616 If a :func:`field` specifies a ``default_factory``, it is called with
617 zero arguments when a default value for the field is needed. For
618 example, to create a new instance of a list, use::
619
Barry Warsaw713a9362018-05-16 15:50:07 -0400620 mylist: list = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400621
622 If a field is excluded from :meth:`__init__` (using ``init=False``)
623 and the field also specifies ``default_factory``, then the default
624 factory function will always be called from the generated
625 :meth:`__init__` function. This happens because there is no other
626 way to give the field an initial value.
627
628Mutable default values
629----------------------
630
631 Python stores default member variable values in class attributes.
Barry Warsaw713a9362018-05-16 15:50:07 -0400632 Consider this example, not using dataclasses::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400633
634 class C:
635 x = []
636 def add(self, element):
Tom Faulknerda5e9472018-07-10 21:39:57 -0500637 self.x.append(element)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400638
639 o1 = C()
640 o2 = C()
641 o1.add(1)
642 o2.add(2)
643 assert o1.x == [1, 2]
644 assert o1.x is o2.x
645
646 Note that the two instances of class ``C`` share the same class
647 variable ``x``, as expected.
648
Barry Warsaw713a9362018-05-16 15:50:07 -0400649 Using dataclasses, *if* this code was valid::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400650
651 @dataclass
652 class D:
653 x: List = []
654 def add(self, element):
655 self.x += element
656
657 it would generate code similar to::
658
659 class D:
660 x = []
661 def __init__(self, x=x):
662 self.x = x
663 def add(self, element):
664 self.x += element
665
666 assert D().x is D().x
667
668 This has the same issue as the original example using class ``C``.
669 That is, two instances of class ``D`` that do not specify a value for
670 ``x`` when creating a class instance will share the same copy of
Barry Warsaw713a9362018-05-16 15:50:07 -0400671 ``x``. Because dataclasses just use normal Python class creation
672 they also share this behavior. There is no general way for Data
673 Classes to detect this condition. Instead, dataclasses will raise a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400674 :exc:`TypeError` if it detects a default parameter of type ``list``,
675 ``dict``, or ``set``. This is a partial solution, but it does protect
676 against many common errors.
677
678 Using default factory functions is a way to create new instances of
679 mutable types as default values for fields::
680
681 @dataclass
682 class D:
683 x: list = field(default_factory=list)
684
685 assert D().x is not D().x
Barry Warsaw713a9362018-05-16 15:50:07 -0400686