blob: 357ea9820fe648dce05efd9e32164c199aac844b [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``,
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400310 ``compare``, ``metadata``, and ``kw_only`` have the identical
311 meaning and values as they do in the :func:`field` declaration.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400312
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
Raymond Hettinger4ae828f2021-05-02 21:07:29 -0700446 name of such a field. By convention, a name of ``_`` is used for a
Eric V. Smith821f0c82021-05-02 21:20:50 -0400447 :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
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400462 In a single dataclass, it is an error to specify more than one
463 field whose type is :const:`KW_ONLY`.
464
Eric V. Smith821f0c82021-05-02 21:20:50 -0400465.. exception:: FrozenInstanceError
466
467 Raised when an implicitly defined :meth:`__setattr__` or
468 :meth:`__delattr__` is called on a dataclass which was defined with
469 ``frozen=True``. It is a subclass of :exc:`AttributeError`.
470
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400471Post-init processing
472--------------------
473
474The generated :meth:`__init__` code will call a method named
475:meth:`__post_init__`, if :meth:`__post_init__` is defined on the
476class. It will normally be called as ``self.__post_init__()``.
477However, if any ``InitVar`` fields are defined, they will also be
Barry Warsaw713a9362018-05-16 15:50:07 -0400478passed to :meth:`__post_init__` in the order they were defined in the
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400479class. If no :meth:`__init__` method is generated, then
480:meth:`__post_init__` will not automatically be called.
481
482Among other uses, this allows for initializing field values that
483depend on one or more other fields. For example::
484
485 @dataclass
486 class C:
487 a: float
488 b: float
489 c: float = field(init=False)
490
491 def __post_init__(self):
492 self.c = self.a + self.b
493
494See the section below on init-only variables for ways to pass
495parameters to :meth:`__post_init__`. Also see the warning about how
496:func:`replace` handles ``init=False`` fields.
497
498Class variables
499---------------
500
501One of two places where :func:`dataclass` actually inspects the type
502of a field is to determine if a field is a class variable as defined
503in :pep:`526`. It does this by checking if the type of the field is
504``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded
Barry Warsaw713a9362018-05-16 15:50:07 -0400505from consideration as a field and is ignored by the dataclass
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400506mechanisms. Such ``ClassVar`` pseudo-fields are not returned by the
507module-level :func:`fields` function.
508
509Init-only variables
510-------------------
511
512The other place where :func:`dataclass` inspects a type annotation is to
513determine if a field is an init-only variable. It does this by seeing
514if the type of a field is of type ``dataclasses.InitVar``. If a field
515is an ``InitVar``, it is considered a pseudo-field called an init-only
516field. As it is not a true field, it is not returned by the
517module-level :func:`fields` function. Init-only fields are added as
518parameters to the generated :meth:`__init__` method, and are passed to
519the optional :meth:`__post_init__` method. They are not otherwise used
Barry Warsaw713a9362018-05-16 15:50:07 -0400520by dataclasses.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400521
Daniel Dương075b3c32018-08-24 16:19:24 +0700522For example, suppose a field will be initialized from a database, if a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400523value is not provided when creating the class::
524
525 @dataclass
526 class C:
527 i: int
528 j: int = None
529 database: InitVar[DatabaseType] = None
530
531 def __post_init__(self, database):
532 if self.j is None and database is not None:
533 self.j = database.lookup('j')
534
535 c = C(10, database=my_database)
536
537In this case, :func:`fields` will return :class:`Field` objects for ``i`` and
538``j``, but not for ``database``.
539
540Frozen instances
541----------------
542
543It is not possible to create truly immutable Python objects. However,
544by passing ``frozen=True`` to the :meth:`dataclass` decorator you can
Barry Warsaw713a9362018-05-16 15:50:07 -0400545emulate immutability. In that case, dataclasses will add
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400546:meth:`__setattr__` and :meth:`__delattr__` methods to the class. These
547methods will raise a :exc:`FrozenInstanceError` when invoked.
548
549There is a tiny performance penalty when using ``frozen=True``:
550:meth:`__init__` cannot use simple assignment to initialize fields, and
551must use :meth:`object.__setattr__`.
552
553Inheritance
554-----------
555
Barry Warsaw713a9362018-05-16 15:50:07 -0400556When the dataclass is being created by the :meth:`dataclass` decorator,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400557it looks through all of the class's base classes in reverse MRO (that
Barry Warsaw713a9362018-05-16 15:50:07 -0400558is, starting at :class:`object`) and, for each dataclass that it finds,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400559adds the fields from that base class to an ordered mapping of fields.
560After all of the base class fields are added, it adds its own fields
561to the ordered mapping. All of the generated methods will use this
562combined, calculated ordered mapping of fields. Because the fields
563are in insertion order, derived classes override base classes. An
564example::
565
566 @dataclass
567 class Base:
568 x: Any = 15.0
569 y: int = 0
570
571 @dataclass
572 class C(Base):
573 z: int = 10
574 x: int = 15
575
576The final list of fields is, in order, ``x``, ``y``, ``z``. The final
577type of ``x`` is ``int``, as specified in class ``C``.
578
579The generated :meth:`__init__` method for ``C`` will look like::
580
581 def __init__(self, x: int = 15, y: int = 0, z: int = 10):
582
Eric V. Smith318ca172021-05-01 21:46:05 -0400583Re-ordering of keyword-only parameters in :meth:`__init__`
584----------------------------------------------------------
Eric V. Smithc0280532021-04-25 20:42:39 -0400585
Eric V. Smith2f59a762021-05-01 19:51:12 -0400586After the parameters needed for :meth:`__init__` are computed, any
Eric V. Smith318ca172021-05-01 21:46:05 -0400587keyword-only parameters are moved to come after all regular
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400588(non-keyword-only) parameters. This is a requirement of how
589keyword-only parameters are implemented in Python: they must come
590after non-keyword-only parameters.
591
592In this example, ``Base.y``, ``Base.w``, and ``D.t`` are keyword-only
593fields, and ``Base.x`` and ``D.z`` are regular fields::
Eric V. Smithc0280532021-04-25 20:42:39 -0400594
595 @dataclass
596 class Base:
597 x: Any = 15.0
598 _: KW_ONLY
599 y: int = 0
Eric V. Smith2f59a762021-05-01 19:51:12 -0400600 w: int = 1
Eric V. Smithc0280532021-04-25 20:42:39 -0400601
602 @dataclass
603 class D(Base):
604 z: int = 10
605 t: int = field(kw_only=True, default=0)
606
607The generated :meth:`__init__` method for ``D`` will look like::
608
Eric V. Smith2f59a762021-05-01 19:51:12 -0400609 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 -0400610
Eric V. Smith2f59a762021-05-01 19:51:12 -0400611Note that the parameters have been re-ordered from how they appear in
612the list of fields: parameters derived from regular fields are
613followed by parameters derived from keyword-only fields.
614
Eric V. Smith318ca172021-05-01 21:46:05 -0400615The relative ordering of keyword-only parameters is maintained in the
616re-ordered :meth:`__init__` parameter list.
Eric V. Smithc0280532021-04-25 20:42:39 -0400617
618
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400619Default factory functions
620-------------------------
621
622 If a :func:`field` specifies a ``default_factory``, it is called with
623 zero arguments when a default value for the field is needed. For
624 example, to create a new instance of a list, use::
625
Barry Warsaw713a9362018-05-16 15:50:07 -0400626 mylist: list = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400627
628 If a field is excluded from :meth:`__init__` (using ``init=False``)
629 and the field also specifies ``default_factory``, then the default
630 factory function will always be called from the generated
631 :meth:`__init__` function. This happens because there is no other
632 way to give the field an initial value.
633
634Mutable default values
635----------------------
636
637 Python stores default member variable values in class attributes.
Barry Warsaw713a9362018-05-16 15:50:07 -0400638 Consider this example, not using dataclasses::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400639
640 class C:
641 x = []
642 def add(self, element):
Tom Faulknerda5e9472018-07-10 21:39:57 -0500643 self.x.append(element)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400644
645 o1 = C()
646 o2 = C()
647 o1.add(1)
648 o2.add(2)
649 assert o1.x == [1, 2]
650 assert o1.x is o2.x
651
652 Note that the two instances of class ``C`` share the same class
653 variable ``x``, as expected.
654
Barry Warsaw713a9362018-05-16 15:50:07 -0400655 Using dataclasses, *if* this code was valid::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400656
657 @dataclass
658 class D:
659 x: List = []
660 def add(self, element):
661 self.x += element
662
663 it would generate code similar to::
664
665 class D:
666 x = []
667 def __init__(self, x=x):
668 self.x = x
669 def add(self, element):
670 self.x += element
671
672 assert D().x is D().x
673
674 This has the same issue as the original example using class ``C``.
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400675 That is, two instances of class ``D`` that do not specify a value
676 for ``x`` when creating a class instance will share the same copy
677 of ``x``. Because dataclasses just use normal Python class
678 creation they also share this behavior. There is no general way
679 for Data Classes to detect this condition. Instead, the
680 :func:`dataclass` decorator will raise a :exc:`TypeError` if it
681 detects a default parameter of type ``list``, ``dict``, or ``set``.
682 This is a partial solution, but it does protect against many common
683 errors.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400684
685 Using default factory functions is a way to create new instances of
686 mutable types as default values for fields::
687
688 @dataclass
689 class D:
690 x: list = field(default_factory=list)
691
692 assert D().x is not D().x