blob: 5915bacbcdc4ec8dcc96c208fe8bad5784ecb2a1 [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
Miss Islington (bot)f0e2a462021-08-19 13:49:15 -0700208.. 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
Miss Islington (bot)7aa58f52021-09-02 09:37:55 -0700224 detect if some parameters are provided by the user. This sentinel is
225 used because ``None`` is a valid value for some parameters with
226 a distinct meaning. No code should directly use the :const:`MISSING` value.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400227
228 The parameters to :func:`field` are:
229
230 - ``default``: If provided, this will be the default value for this
231 field. This is needed because the :meth:`field` call itself
232 replaces the normal position of the default value.
233
234 - ``default_factory``: If provided, it must be a zero-argument
235 callable that will be called when a default value is needed for
236 this field. Among other purposes, this can be used to specify
237 fields with mutable default values, as discussed below. It is an
238 error to specify both ``default`` and ``default_factory``.
239
240 - ``init``: If true (the default), this field is included as a
241 parameter to the generated :meth:`__init__` method.
242
243 - ``repr``: If true (the default), this field is included in the
244 string returned by the generated :meth:`__repr__` method.
245
Barry Warsaw713a9362018-05-16 15:50:07 -0400246 - ``hash``: This can be a bool or ``None``. If true, this field is
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400247 included in the generated :meth:`__hash__` method. If ``None`` (the
248 default), use the value of ``compare``: this would normally be
249 the expected behavior. A field should be considered in the hash
250 if it's used for comparisons. Setting this value to anything
251 other than ``None`` is discouraged.
252
253 One possible reason to set ``hash=False`` but ``compare=True``
254 would be if a field is expensive to compute a hash value for,
255 that field is needed for equality testing, and there are other
256 fields that contribute to the type's hash value. Even if a field
257 is excluded from the hash, it will still be used for comparisons.
258
Eric V. Smith2f59a762021-05-01 19:51:12 -0400259 - ``compare``: If true (the default), this field is included in the
260 generated equality and comparison methods (:meth:`__eq__`,
261 :meth:`__gt__`, et al.).
262
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400263 - ``metadata``: This can be a mapping or None. None is treated as
264 an empty dict. This value is wrapped in
265 :func:`~types.MappingProxyType` to make it read-only, and exposed
266 on the :class:`Field` object. It is not used at all by Data
267 Classes, and is provided as a third-party extension mechanism.
268 Multiple third-parties can each have their own key, to use as a
269 namespace in the metadata.
270
Eric V. Smith2f59a762021-05-01 19:51:12 -0400271 - ``kw_only``: If true, this field will be marked as keyword-only.
272 This is used when the generated :meth:`__init__` method's
273 parameters are computed.
274
Shreyan Avigyana5eabc92021-05-02 21:13:50 +0530275 .. versionadded:: 3.10
276
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400277 If the default value of a field is specified by a call to
278 :func:`field()`, then the class attribute for this field will be
279 replaced by the specified ``default`` value. If no ``default`` is
280 provided, then the class attribute will be deleted. The intent is
281 that after the :func:`dataclass` decorator runs, the class
282 attributes will all contain the default values for the fields, just
283 as if the default value itself were specified. For example,
284 after::
285
286 @dataclass
287 class C:
288 x: int
289 y: int = field(repr=False)
290 z: int = field(repr=False, default=10)
291 t: int = 20
292
293 The class attribute ``C.z`` will be ``10``, the class attribute
294 ``C.t`` will be ``20``, and the class attributes ``C.x`` and
295 ``C.y`` will not be set.
296
297.. class:: Field
298
299 :class:`Field` objects describe each defined field. These objects
300 are created internally, and are returned by the :func:`fields`
301 module-level method (see below). Users should never instantiate a
302 :class:`Field` object directly. Its documented attributes are:
303
304 - ``name``: The name of the field.
305
306 - ``type``: The type of the field.
307
308 - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``,
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400309 ``compare``, ``metadata``, and ``kw_only`` have the identical
Miss Islington (bot)70ff8202021-05-08 19:22:48 -0700310 meaning and values as they do in the :func:`field` function.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400311
312 Other attributes may exist, but they are private and must not be
313 inspected or relied on.
314
315.. function:: fields(class_or_instance)
316
Barry Warsaw713a9362018-05-16 15:50:07 -0400317 Returns a tuple of :class:`Field` objects that define the fields for this
318 dataclass. Accepts either a dataclass, or an instance of a dataclass.
319 Raises :exc:`TypeError` if not passed a dataclass or instance of one.
320 Does not return pseudo-fields which are ``ClassVar`` or ``InitVar``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400321
322.. function:: asdict(instance, *, dict_factory=dict)
323
Barry Warsaw713a9362018-05-16 15:50:07 -0400324 Converts the dataclass ``instance`` to a dict (by using the
325 factory function ``dict_factory``). Each dataclass is converted
326 to a dict of its fields, as ``name: value`` pairs. dataclasses, dicts,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400327 lists, and tuples are recursed into. For example::
328
329 @dataclass
330 class Point:
331 x: int
332 y: int
333
334 @dataclass
335 class C:
Andre Delfino7f54e562020-10-03 19:10:59 -0300336 mylist: list[Point]
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400337
338 p = Point(10, 20)
339 assert asdict(p) == {'x': 10, 'y': 20}
340
341 c = C([Point(0, 0), Point(10, 4)])
Barry Warsaw713a9362018-05-16 15:50:07 -0400342 assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400343
Barry Warsaw713a9362018-05-16 15:50:07 -0400344 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400345
방성범 (Bang Seongbeom)508d8202018-09-29 19:50:31 +0900346.. function:: astuple(instance, *, tuple_factory=tuple)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400347
Barry Warsaw713a9362018-05-16 15:50:07 -0400348 Converts the dataclass ``instance`` to a tuple (by using the
349 factory function ``tuple_factory``). Each dataclass is converted
350 to a tuple of its field values. dataclasses, dicts, lists, and
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400351 tuples are recursed into.
352
353 Continuing from the previous example::
354
355 assert astuple(p) == (10, 20)
356 assert astuple(c) == ([(0, 0), (10, 4)],)
357
Barry Warsaw713a9362018-05-16 15:50:07 -0400358 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400359
Yurii Karabasc2419912021-05-01 05:14:30 +0300360.. 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 -0400361
Barry Warsaw713a9362018-05-16 15:50:07 -0400362 Creates a new dataclass with name ``cls_name``, fields as defined
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400363 in ``fields``, base classes as given in ``bases``, and initialized
364 with a namespace as given in ``namespace``. ``fields`` is an
365 iterable whose elements are each either ``name``, ``(name, type)``,
366 or ``(name, type, Field)``. If just ``name`` is supplied,
367 ``typing.Any`` is used for ``type``. The values of ``init``,
Eric V. Smithc0280532021-04-25 20:42:39 -0400368 ``repr``, ``eq``, ``order``, ``unsafe_hash``, ``frozen``,
Yurii Karabasc2419912021-05-01 05:14:30 +0300369 ``match_args``, ``kw_only``, and ``slots`` have the same meaning as
370 they do in :func:`dataclass`.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400371
372 This function is not strictly required, because any Python
373 mechanism for creating a new class with ``__annotations__`` can
374 then apply the :func:`dataclass` function to convert that class to
Barry Warsaw713a9362018-05-16 15:50:07 -0400375 a dataclass. This function is provided as a convenience. For
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400376 example::
377
378 C = make_dataclass('C',
379 [('x', int),
380 'y',
381 ('z', int, field(default=5))],
382 namespace={'add_one': lambda self: self.x + 1})
383
384 Is equivalent to::
385
386 @dataclass
387 class C:
388 x: int
389 y: 'typing.Any'
390 z: int = 5
391
392 def add_one(self):
393 return self.x + 1
394
Serhiy Storchaka2d88e632019-06-26 19:07:44 +0300395.. function:: replace(instance, /, **changes)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400396
Miss Islington (bot)ba5076f2021-05-06 14:54:32 -0700397 Creates a new object of the same type as ``instance``, replacing
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400398 fields with values from ``changes``. If ``instance`` is not a Data
399 Class, raises :exc:`TypeError`. If values in ``changes`` do not
400 specify fields, raises :exc:`TypeError`.
401
402 The newly returned object is created by calling the :meth:`__init__`
Barry Warsaw713a9362018-05-16 15:50:07 -0400403 method of the dataclass. This ensures that
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400404 :meth:`__post_init__`, if present, is also called.
405
406 Init-only variables without default values, if any exist, must be
407 specified on the call to :func:`replace` so that they can be passed to
408 :meth:`__init__` and :meth:`__post_init__`.
409
Barry Warsaw713a9362018-05-16 15:50:07 -0400410 It is an error for ``changes`` to contain any fields that are
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400411 defined as having ``init=False``. A :exc:`ValueError` will be raised
412 in this case.
413
414 Be forewarned about how ``init=False`` fields work during a call to
415 :func:`replace`. They are not copied from the source object, but
416 rather are initialized in :meth:`__post_init__`, if they're
417 initialized at all. It is expected that ``init=False`` fields will
418 be rarely and judiciously used. If they are used, it might be wise
419 to have alternate class constructors, or perhaps a custom
420 ``replace()`` (or similarly named) method which handles instance
421 copying.
422
423.. function:: is_dataclass(class_or_instance)
424
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200425 Return ``True`` if its parameter is a dataclass or an instance of one,
426 otherwise return ``False``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400427
428 If you need to know if a class is an instance of a dataclass (and
429 not a dataclass itself), then add a further check for ``not
430 isinstance(obj, type)``::
431
432 def is_dataclass_instance(obj):
433 return is_dataclass(obj) and not isinstance(obj, type)
434
Eric V. Smith821f0c82021-05-02 21:20:50 -0400435.. data:: MISSING
436
437 A sentinel value signifying a missing default or default_factory.
438
439.. data:: KW_ONLY
440
Eric V. Smith72720a22021-05-03 02:33:34 -0400441 A sentinel value used as a type annotation. Any fields after a
Eric V. Smith821f0c82021-05-02 21:20:50 -0400442 pseudo-field with the type of :const:`KW_ONLY` are marked as
443 keyword-only fields. Note that a pseudo-field of type
444 :const:`KW_ONLY` is otherwise completely ignored. This includes the
Raymond Hettinger4ae828f2021-05-02 21:07:29 -0700445 name of such a field. By convention, a name of ``_`` is used for a
Eric V. Smith821f0c82021-05-02 21:20:50 -0400446 :const:`KW_ONLY` field. Keyword-only fields signify
447 :meth:`__init__` parameters that must be specified as keywords when
448 the class is instantiated.
449
450 In this example, the fields ``y`` and ``z`` will be marked as keyword-only fields::
451
452 @dataclass
453 class Point:
454 x: float
455 _: KW_ONLY
456 y: float
457 z: float
458
459 p = Point(0, y=1.5, z=2.0)
460
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400461 In a single dataclass, it is an error to specify more than one
462 field whose type is :const:`KW_ONLY`.
463
Eric V. Smith821f0c82021-05-02 21:20:50 -0400464.. exception:: FrozenInstanceError
465
466 Raised when an implicitly defined :meth:`__setattr__` or
467 :meth:`__delattr__` is called on a dataclass which was defined with
468 ``frozen=True``. It is a subclass of :exc:`AttributeError`.
469
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400470Post-init processing
471--------------------
472
473The generated :meth:`__init__` code will call a method named
474:meth:`__post_init__`, if :meth:`__post_init__` is defined on the
475class. It will normally be called as ``self.__post_init__()``.
476However, if any ``InitVar`` fields are defined, they will also be
Barry Warsaw713a9362018-05-16 15:50:07 -0400477passed to :meth:`__post_init__` in the order they were defined in the
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400478class. If no :meth:`__init__` method is generated, then
479:meth:`__post_init__` will not automatically be called.
480
481Among other uses, this allows for initializing field values that
482depend on one or more other fields. For example::
483
484 @dataclass
485 class C:
486 a: float
487 b: float
488 c: float = field(init=False)
489
490 def __post_init__(self):
491 self.c = self.a + self.b
492
Miss Islington (bot)f47305a2021-05-10 06:38:46 -0700493The :meth:`__init__` method generated by :func:`dataclass` does not call base
494class :meth:`__init__` methods. If the base class has an :meth:`__init__` method
495that has to be called, it is common to call this method in a
496:meth:`__post_init__` method::
497
498 @dataclass
499 class Rectangle:
500 height: float
501 width: float
502
503 @dataclass
504 class Square(Rectangle):
505 side: float
506
507 def __post_init__(self):
508 super().__init__(self.side, self.side)
509
510Note, however, that in general the dataclass-generated :meth:`__init__` methods
511don't need to be called, since the derived dataclass will take care of
512initializing all fields of any base class that is a dataclass itself.
513
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400514See the section below on init-only variables for ways to pass
515parameters to :meth:`__post_init__`. Also see the warning about how
516:func:`replace` handles ``init=False`` fields.
517
518Class variables
519---------------
520
521One of two places where :func:`dataclass` actually inspects the type
522of a field is to determine if a field is a class variable as defined
523in :pep:`526`. It does this by checking if the type of the field is
524``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded
Barry Warsaw713a9362018-05-16 15:50:07 -0400525from consideration as a field and is ignored by the dataclass
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400526mechanisms. Such ``ClassVar`` pseudo-fields are not returned by the
527module-level :func:`fields` function.
528
529Init-only variables
530-------------------
531
532The other place where :func:`dataclass` inspects a type annotation is to
533determine if a field is an init-only variable. It does this by seeing
534if the type of a field is of type ``dataclasses.InitVar``. If a field
535is an ``InitVar``, it is considered a pseudo-field called an init-only
536field. As it is not a true field, it is not returned by the
537module-level :func:`fields` function. Init-only fields are added as
538parameters to the generated :meth:`__init__` method, and are passed to
539the optional :meth:`__post_init__` method. They are not otherwise used
Barry Warsaw713a9362018-05-16 15:50:07 -0400540by dataclasses.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400541
Daniel Dương075b3c32018-08-24 16:19:24 +0700542For example, suppose a field will be initialized from a database, if a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400543value is not provided when creating the class::
544
545 @dataclass
546 class C:
547 i: int
548 j: int = None
549 database: InitVar[DatabaseType] = None
550
551 def __post_init__(self, database):
552 if self.j is None and database is not None:
553 self.j = database.lookup('j')
554
555 c = C(10, database=my_database)
556
557In this case, :func:`fields` will return :class:`Field` objects for ``i`` and
558``j``, but not for ``database``.
559
560Frozen instances
561----------------
562
563It is not possible to create truly immutable Python objects. However,
564by passing ``frozen=True`` to the :meth:`dataclass` decorator you can
Barry Warsaw713a9362018-05-16 15:50:07 -0400565emulate immutability. In that case, dataclasses will add
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400566:meth:`__setattr__` and :meth:`__delattr__` methods to the class. These
567methods will raise a :exc:`FrozenInstanceError` when invoked.
568
569There is a tiny performance penalty when using ``frozen=True``:
570:meth:`__init__` cannot use simple assignment to initialize fields, and
571must use :meth:`object.__setattr__`.
572
573Inheritance
574-----------
575
Barry Warsaw713a9362018-05-16 15:50:07 -0400576When the dataclass is being created by the :meth:`dataclass` decorator,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400577it looks through all of the class's base classes in reverse MRO (that
Barry Warsaw713a9362018-05-16 15:50:07 -0400578is, starting at :class:`object`) and, for each dataclass that it finds,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400579adds the fields from that base class to an ordered mapping of fields.
580After all of the base class fields are added, it adds its own fields
581to the ordered mapping. All of the generated methods will use this
582combined, calculated ordered mapping of fields. Because the fields
583are in insertion order, derived classes override base classes. An
584example::
585
586 @dataclass
587 class Base:
588 x: Any = 15.0
589 y: int = 0
590
591 @dataclass
592 class C(Base):
593 z: int = 10
594 x: int = 15
595
596The final list of fields is, in order, ``x``, ``y``, ``z``. The final
597type of ``x`` is ``int``, as specified in class ``C``.
598
599The generated :meth:`__init__` method for ``C`` will look like::
600
601 def __init__(self, x: int = 15, y: int = 0, z: int = 10):
602
Eric V. Smith318ca172021-05-01 21:46:05 -0400603Re-ordering of keyword-only parameters in :meth:`__init__`
604----------------------------------------------------------
Eric V. Smithc0280532021-04-25 20:42:39 -0400605
Eric V. Smith2f59a762021-05-01 19:51:12 -0400606After the parameters needed for :meth:`__init__` are computed, any
Eric V. Smith318ca172021-05-01 21:46:05 -0400607keyword-only parameters are moved to come after all regular
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400608(non-keyword-only) parameters. This is a requirement of how
609keyword-only parameters are implemented in Python: they must come
610after non-keyword-only parameters.
611
612In this example, ``Base.y``, ``Base.w``, and ``D.t`` are keyword-only
613fields, and ``Base.x`` and ``D.z`` are regular fields::
Eric V. Smithc0280532021-04-25 20:42:39 -0400614
615 @dataclass
616 class Base:
617 x: Any = 15.0
618 _: KW_ONLY
619 y: int = 0
Eric V. Smith2f59a762021-05-01 19:51:12 -0400620 w: int = 1
Eric V. Smithc0280532021-04-25 20:42:39 -0400621
622 @dataclass
623 class D(Base):
624 z: int = 10
625 t: int = field(kw_only=True, default=0)
626
627The generated :meth:`__init__` method for ``D`` will look like::
628
Eric V. Smith2f59a762021-05-01 19:51:12 -0400629 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 -0400630
Eric V. Smith2f59a762021-05-01 19:51:12 -0400631Note that the parameters have been re-ordered from how they appear in
632the list of fields: parameters derived from regular fields are
633followed by parameters derived from keyword-only fields.
634
Eric V. Smith318ca172021-05-01 21:46:05 -0400635The relative ordering of keyword-only parameters is maintained in the
636re-ordered :meth:`__init__` parameter list.
Eric V. Smithc0280532021-04-25 20:42:39 -0400637
638
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400639Default factory functions
640-------------------------
641
642 If a :func:`field` specifies a ``default_factory``, it is called with
643 zero arguments when a default value for the field is needed. For
644 example, to create a new instance of a list, use::
645
Barry Warsaw713a9362018-05-16 15:50:07 -0400646 mylist: list = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400647
648 If a field is excluded from :meth:`__init__` (using ``init=False``)
649 and the field also specifies ``default_factory``, then the default
650 factory function will always be called from the generated
651 :meth:`__init__` function. This happens because there is no other
652 way to give the field an initial value.
653
654Mutable default values
655----------------------
656
657 Python stores default member variable values in class attributes.
Barry Warsaw713a9362018-05-16 15:50:07 -0400658 Consider this example, not using dataclasses::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400659
660 class C:
661 x = []
662 def add(self, element):
Tom Faulknerda5e9472018-07-10 21:39:57 -0500663 self.x.append(element)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400664
665 o1 = C()
666 o2 = C()
667 o1.add(1)
668 o2.add(2)
669 assert o1.x == [1, 2]
670 assert o1.x is o2.x
671
672 Note that the two instances of class ``C`` share the same class
673 variable ``x``, as expected.
674
Barry Warsaw713a9362018-05-16 15:50:07 -0400675 Using dataclasses, *if* this code was valid::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400676
677 @dataclass
678 class D:
679 x: List = []
680 def add(self, element):
681 self.x += element
682
683 it would generate code similar to::
684
685 class D:
686 x = []
687 def __init__(self, x=x):
688 self.x = x
689 def add(self, element):
690 self.x += element
691
692 assert D().x is D().x
693
694 This has the same issue as the original example using class ``C``.
Eric V. Smitha21b3d22021-05-03 01:55:13 -0400695 That is, two instances of class ``D`` that do not specify a value
696 for ``x`` when creating a class instance will share the same copy
697 of ``x``. Because dataclasses just use normal Python class
698 creation they also share this behavior. There is no general way
699 for Data Classes to detect this condition. Instead, the
700 :func:`dataclass` decorator will raise a :exc:`TypeError` if it
701 detects a default parameter of type ``list``, ``dict``, or ``set``.
702 This is a partial solution, but it does protect against many common
703 errors.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400704
705 Using default factory functions is a way to create new instances of
706 mutable types as default values for fields::
707
708 @dataclass
709 class D:
710 x: list = field(default_factory=list)
711
712 assert D().x is not D().x