blob: e203a1a2132df90e61a2f4e793951e63fb9dad80 [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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -070020using :pep:`526` type annotations. For example, this code::
Eric V. Smith98d50cb2018-05-16 04:20:43 -040021
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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -070034will add, among other things, a :meth:`__init__` that looks like::
Eric V. Smith98d50cb2018-05-16 04:20:43 -040035
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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -070055 ``field``\s. A ``field`` is defined as a 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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -070065 exist in the class, the behavior depends on the parameter, as documented
66 below. The decorator returns the same class that it is called on; no new
Fabio Sangiovannie28aff52019-12-25 23:45:30 +010067 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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -0700205 follows a field with a default value. This is true whether this
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400206 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
Miss Islington (bot)70ff8202021-05-08 19:22:48 -0700311 meaning and values as they do in the :func:`field` function.
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
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -0700398 Creates a new object of the same type as ``instance``, replacing
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400399 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
Eric V. Smith72720a22021-05-03 02:33:34 -0400442 A sentinel value used as a type annotation. Any fields after a
Eric V. Smith821f0c82021-05-02 21:20:50 -0400443 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
Miss Islington (bot)f47305a2021-05-10 06:38:46 -0700494The :meth:`__init__` method generated by :func:`dataclass` does not call base
495class :meth:`__init__` methods. If the base class has an :meth:`__init__` method
496that has to be called, it is common to call this method in a
497:meth:`__post_init__` method::
498
499 @dataclass
500 class Rectangle:
501 height: float
502 width: float
503
504 @dataclass
505 class Square(Rectangle):
506 side: float
507
508 def __post_init__(self):
509 super().__init__(self.side, self.side)
510
511Note, however, that in general the dataclass-generated :meth:`__init__` methods
512don't need to be called, since the derived dataclass will take care of
513initializing all fields of any base class that is a dataclass itself.
514
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400515See the section below on init-only variables for ways to pass
516parameters to :meth:`__post_init__`. Also see the warning about how
517:func:`replace` handles ``init=False`` fields.
518
519Class variables
520---------------
521
522One of two places where :func:`dataclass` actually inspects the type
523of a field is to determine if a field is a class variable as defined
524in :pep:`526`. It does this by checking if the type of the field is
525``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded
Barry Warsaw713a9362018-05-16 15:50:07 -0400526from consideration as a field and is ignored by the dataclass
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400527mechanisms. Such ``ClassVar`` pseudo-fields are not returned by the
528module-level :func:`fields` function.
529
530Init-only variables
531-------------------
532
533The other place where :func:`dataclass` inspects a type annotation is to
534determine if a field is an init-only variable. It does this by seeing
535if the type of a field is of type ``dataclasses.InitVar``. If a field
536is an ``InitVar``, it is considered a pseudo-field called an init-only
537field. As it is not a true field, it is not returned by the
538module-level :func:`fields` function. Init-only fields are added as
539parameters to the generated :meth:`__init__` method, and are passed to
540the optional :meth:`__post_init__` method. They are not otherwise used
Barry Warsaw713a9362018-05-16 15:50:07 -0400541by dataclasses.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400542
Daniel Dương075b3c32018-08-24 16:19:24 +0700543For example, suppose a field will be initialized from a database, if a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400544value is not provided when creating the class::
545
546 @dataclass
547 class C:
548 i: int
549 j: int = None
550 database: InitVar[DatabaseType] = None
551
552 def __post_init__(self, database):
553 if self.j is None and database is not None:
554 self.j = database.lookup('j')
555
556 c = C(10, database=my_database)
557
558In this case, :func:`fields` will return :class:`Field` objects for ``i`` and
559``j``, but not for ``database``.
560
561Frozen instances
562----------------
563
564It is not possible to create truly immutable Python objects. However,
565by passing ``frozen=True`` to the :meth:`dataclass` decorator you can
Barry Warsaw713a9362018-05-16 15:50:07 -0400566emulate immutability. In that case, dataclasses will add
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400567:meth:`__setattr__` and :meth:`__delattr__` methods to the class. These
568methods will raise a :exc:`FrozenInstanceError` when invoked.
569
570There is a tiny performance penalty when using ``frozen=True``:
571:meth:`__init__` cannot use simple assignment to initialize fields, and
572must use :meth:`object.__setattr__`.
573
574Inheritance
575-----------
576
Barry Warsaw713a9362018-05-16 15:50:07 -0400577When the dataclass is being created by the :meth:`dataclass` decorator,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400578it looks through all of the class's base classes in reverse MRO (that
Barry Warsaw713a9362018-05-16 15:50:07 -0400579is, starting at :class:`object`) and, for each dataclass that it finds,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400580adds the fields from that base class to an ordered mapping of fields.
581After all of the base class fields are added, it adds its own fields
582to the ordered mapping. All of the generated methods will use this
583combined, calculated ordered mapping of fields. Because the fields
584are in insertion order, derived classes override base classes. An
585example::
586
587 @dataclass
588 class Base:
589 x: Any = 15.0
590 y: int = 0
591
592 @dataclass
593 class C(Base):
594 z: int = 10
595 x: int = 15
596
597The final list of fields is, in order, ``x``, ``y``, ``z``. The final
598type of ``x`` is ``int``, as specified in class ``C``.
599
600The generated :meth:`__init__` method for ``C`` will look like::
601
602 def __init__(self, x: int = 15, y: int = 0, z: int = 10):
603
Eric V. Smith318ca172021-05-01 21:46:05 -0400604Re-ordering of keyword-only parameters in :meth:`__init__`
605----------------------------------------------------------
Eric V. Smithc0280532021-04-25 20:42:39 -0400606
Eric V. Smith2f59a762021-05-01 19:51:12 -0400607After the parameters needed for :meth:`__init__` are computed, any
Eric V. Smith318ca172021-05-01 21:46:05 -0400608keyword-only parameters are moved to come after all regular
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400609(non-keyword-only) parameters. This is a requirement of how
610keyword-only parameters are implemented in Python: they must come
611after non-keyword-only parameters.
612
613In this example, ``Base.y``, ``Base.w``, and ``D.t`` are keyword-only
614fields, and ``Base.x`` and ``D.z`` are regular fields::
Eric V. Smithc0280532021-04-25 20:42:39 -0400615
616 @dataclass
617 class Base:
618 x: Any = 15.0
619 _: KW_ONLY
620 y: int = 0
Eric V. Smith2f59a762021-05-01 19:51:12 -0400621 w: int = 1
Eric V. Smithc0280532021-04-25 20:42:39 -0400622
623 @dataclass
624 class D(Base):
625 z: int = 10
626 t: int = field(kw_only=True, default=0)
627
628The generated :meth:`__init__` method for ``D`` will look like::
629
Eric V. Smith2f59a762021-05-01 19:51:12 -0400630 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 -0400631
Eric V. Smith2f59a762021-05-01 19:51:12 -0400632Note that the parameters have been re-ordered from how they appear in
633the list of fields: parameters derived from regular fields are
634followed by parameters derived from keyword-only fields.
635
Eric V. Smith318ca172021-05-01 21:46:05 -0400636The relative ordering of keyword-only parameters is maintained in the
637re-ordered :meth:`__init__` parameter list.
Eric V. Smithc0280532021-04-25 20:42:39 -0400638
639
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400640Default factory functions
641-------------------------
642
643 If a :func:`field` specifies a ``default_factory``, it is called with
644 zero arguments when a default value for the field is needed. For
645 example, to create a new instance of a list, use::
646
Barry Warsaw713a9362018-05-16 15:50:07 -0400647 mylist: list = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400648
649 If a field is excluded from :meth:`__init__` (using ``init=False``)
650 and the field also specifies ``default_factory``, then the default
651 factory function will always be called from the generated
652 :meth:`__init__` function. This happens because there is no other
653 way to give the field an initial value.
654
655Mutable default values
656----------------------
657
658 Python stores default member variable values in class attributes.
Barry Warsaw713a9362018-05-16 15:50:07 -0400659 Consider this example, not using dataclasses::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400660
661 class C:
662 x = []
663 def add(self, element):
Tom Faulknerda5e9472018-07-10 21:39:57 -0500664 self.x.append(element)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400665
666 o1 = C()
667 o2 = C()
668 o1.add(1)
669 o2.add(2)
670 assert o1.x == [1, 2]
671 assert o1.x is o2.x
672
673 Note that the two instances of class ``C`` share the same class
674 variable ``x``, as expected.
675
Barry Warsaw713a9362018-05-16 15:50:07 -0400676 Using dataclasses, *if* this code was valid::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400677
678 @dataclass
679 class D:
680 x: List = []
681 def add(self, element):
682 self.x += element
683
684 it would generate code similar to::
685
686 class D:
687 x = []
688 def __init__(self, x=x):
689 self.x = x
690 def add(self, element):
691 self.x += element
692
693 assert D().x is D().x
694
695 This has the same issue as the original example using class ``C``.
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400696 That is, two instances of class ``D`` that do not specify a value
697 for ``x`` when creating a class instance will share the same copy
698 of ``x``. Because dataclasses just use normal Python class
699 creation they also share this behavior. There is no general way
700 for Data Classes to detect this condition. Instead, the
701 :func:`dataclass` decorator will raise a :exc:`TypeError` if it
702 detects a default parameter of type ``list``, ``dict``, or ``set``.
703 This is a partial solution, but it does protect against many common
704 errors.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400705
706 Using default factory functions is a way to create new instances of
707 mutable types as default values for fields::
708
709 @dataclass
710 class D:
711 x: list = field(default_factory=list)
712
713 assert D().x is not D().x