blob: c125a1130a960361bcf47db14e62db5b9e109701 [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
22 @dataclass
23 class InventoryItem:
24 '''Class for keeping track of an item in inventory.'''
25 name: str
26 unit_price: float
27 quantity_on_hand: int = 0
28
29 def total_cost(self) -> float:
30 return self.unit_price * self.quantity_on_hand
31
32Will add, among other things, a :meth:`__init__` that looks like::
33
34 def __init__(self, name: str, unit_price: float, quantity_on_hand: int=0):
35 self.name = name
36 self.unit_price = unit_price
37 self.quantity_on_hand = quantity_on_hand
38
39Note that this method is automatically added to the class: it is not
40directly specified in the ``InventoryItem`` definition shown above.
41
42.. versionadded:: 3.7
43
44Module-level decorators, classes, and functions
45-----------------------------------------------
46
47.. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
48
49 This function is a :term:`decorator` that is used to add generated
50 :term:`special method`\s to classes, as described below.
51
52 The :func:`dataclass` decorator examines the class to find
53 ``field``\s. A ``field`` is defined as class variable that has a
Cheryl Sabellab7105c92018-12-24 00:09:09 -050054 :term:`type annotation <variable annotation>`. With two
55 exceptions described below, nothing in :func:`dataclass`
56 examines the type specified in the variable annotation.
Eric V. Smith98d50cb2018-05-16 04:20:43 -040057
58 The order of the fields in all of the generated methods is the
59 order in which they appear in the class definition.
60
61 The :func:`dataclass` decorator will add various "dunder" methods to
62 the class, described below. If any of the added methods already
Fabio Sangiovannie28aff52019-12-25 23:45:30 +010063 exist on the class, the behavior depends on the parameter, as documented
64 below. The decorator returns the same class that is called on; no new
65 class is created.
Eric V. Smith98d50cb2018-05-16 04:20:43 -040066
67 If :func:`dataclass` is used just as a simple decorator with no parameters,
68 it acts as if it has the default values documented in this
69 signature. That is, these three uses of :func:`dataclass` are
70 equivalent::
71
72 @dataclass
73 class C:
74 ...
75
76 @dataclass()
77 class C:
78 ...
79
80 @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
81 class C:
82 ...
83
84 The parameters to :func:`dataclass` are:
85
86 - ``init``: If true (the default), a :meth:`__init__` method will be
87 generated.
88
89 If the class already defines :meth:`__init__`, this parameter is
90 ignored.
91
92 - ``repr``: If true (the default), a :meth:`__repr__` method will be
93 generated. The generated repr string will have the class name and
94 the name and repr of each field, in the order they are defined in
95 the class. Fields that are marked as being excluded from the repr
96 are not included. For example:
97 ``InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)``.
98
99 If the class already defines :meth:`__repr__`, this parameter is
100 ignored.
101
102 - ``eq``: If true (the default), an :meth:`__eq__` method will be
103 generated. This method compares the class as if it were a tuple
104 of its fields, in order. Both instances in the comparison must
105 be of the identical type.
106
107 If the class already defines :meth:`__eq__`, this parameter is
108 ignored.
109
110 - ``order``: If true (the default is ``False``), :meth:`__lt__`,
111 :meth:`__le__`, :meth:`__gt__`, and :meth:`__ge__` methods will be
112 generated. These compare the class as if it were a tuple of its
113 fields, in order. Both instances in the comparison must be of the
114 identical type. If ``order`` is true and ``eq`` is false, a
115 :exc:`ValueError` is raised.
116
117 If the class already defines any of :meth:`__lt__`,
118 :meth:`__le__`, :meth:`__gt__`, or :meth:`__ge__`, then
Fabio Sangiovannie28aff52019-12-25 23:45:30 +0100119 :exc:`TypeError` is raised.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400120
Barry Warsaw713a9362018-05-16 15:50:07 -0400121 - ``unsafe_hash``: If ``False`` (the default), a :meth:`__hash__` method
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400122 is generated according to how ``eq`` and ``frozen`` are set.
123
Barry Warsaw713a9362018-05-16 15:50:07 -0400124 :meth:`__hash__` is used by built-in :meth:`hash()`, and when objects are
125 added to hashed collections such as dictionaries and sets. Having a
126 :meth:`__hash__` implies that instances of the class are immutable.
127 Mutability is a complicated property that depends on the programmer's
128 intent, the existence and behavior of :meth:`__eq__`, and the values of
129 the ``eq`` and ``frozen`` flags in the :func:`dataclass` decorator.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400130
Barry Warsaw713a9362018-05-16 15:50:07 -0400131 By default, :func:`dataclass` will not implicitly add a :meth:`__hash__`
132 method unless it is safe to do so. Neither will it add or change an
133 existing explicitly defined :meth:`__hash__` method. Setting the class
134 attribute ``__hash__ = None`` has a specific meaning to Python, as
135 described in the :meth:`__hash__` documentation.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400136
Barry Warsaw713a9362018-05-16 15:50:07 -0400137 If :meth:`__hash__` is not explicit defined, or if it is set to ``None``,
138 then :func:`dataclass` *may* add an implicit :meth:`__hash__` method.
139 Although not recommended, you can force :func:`dataclass` to create a
140 :meth:`__hash__` method with ``unsafe_hash=True``. This might be the case
141 if your class is logically immutable but can nonetheless be mutated.
142 This is a specialized use case and should be considered carefully.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400143
Barry Warsaw713a9362018-05-16 15:50:07 -0400144 Here are the rules governing implicit creation of a :meth:`__hash__`
145 method. Note that you cannot both have an explicit :meth:`__hash__`
146 method in your dataclass and set ``unsafe_hash=True``; this will result
147 in a :exc:`TypeError`.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400148
Barry Warsaw713a9362018-05-16 15:50:07 -0400149 If ``eq`` and ``frozen`` are both true, by default :func:`dataclass` will
150 generate a :meth:`__hash__` method for you. If ``eq`` is true and
151 ``frozen`` is false, :meth:`__hash__` will be set to ``None``, marking it
152 unhashable (which it is, since it is mutable). If ``eq`` is false,
153 :meth:`__hash__` will be left untouched meaning the :meth:`__hash__`
154 method of the superclass will be used (if the superclass is
155 :class:`object`, this means it will fall back to id-based hashing).
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400156
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200157 - ``frozen``: If true (the default is ``False``), assigning to fields will
Barry Warsaw713a9362018-05-16 15:50:07 -0400158 generate an exception. This emulates read-only frozen instances. If
159 :meth:`__setattr__` or :meth:`__delattr__` is defined in the class, then
160 :exc:`TypeError` is raised. See the discussion below.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400161
162 ``field``\s may optionally specify a default value, using normal
163 Python syntax::
164
165 @dataclass
166 class C:
167 a: int # 'a' has no default value
168 b: int = 0 # assign a default value for 'b'
169
170 In this example, both ``a`` and ``b`` will be included in the added
171 :meth:`__init__` method, which will be defined as::
172
173 def __init__(self, a: int, b: int = 0):
174
175 :exc:`TypeError` will be raised if a field without a default value
176 follows a field with a default value. This is true either when this
177 occurs in a single class, or as a result of class inheritance.
178
179.. function:: field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None)
180
181 For common and simple use cases, no other functionality is
Barry Warsaw713a9362018-05-16 15:50:07 -0400182 required. There are, however, some dataclass features that
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400183 require additional per-field information. To satisfy this need for
184 additional information, you can replace the default field value
185 with a call to the provided :func:`field` function. For example::
186
187 @dataclass
188 class C:
Barry Warsaw713a9362018-05-16 15:50:07 -0400189 mylist: List[int] = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400190
191 c = C()
Barry Warsaw713a9362018-05-16 15:50:07 -0400192 c.mylist += [1, 2, 3]
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400193
194 As shown above, the ``MISSING`` value is a sentinel object used to
195 detect if the ``default`` and ``default_factory`` parameters are
196 provided. This sentinel is used because ``None`` is a valid value
197 for ``default``. No code should directly use the ``MISSING``
198 value.
199
200 The parameters to :func:`field` are:
201
202 - ``default``: If provided, this will be the default value for this
203 field. This is needed because the :meth:`field` call itself
204 replaces the normal position of the default value.
205
206 - ``default_factory``: If provided, it must be a zero-argument
207 callable that will be called when a default value is needed for
208 this field. Among other purposes, this can be used to specify
209 fields with mutable default values, as discussed below. It is an
210 error to specify both ``default`` and ``default_factory``.
211
212 - ``init``: If true (the default), this field is included as a
213 parameter to the generated :meth:`__init__` method.
214
215 - ``repr``: If true (the default), this field is included in the
216 string returned by the generated :meth:`__repr__` method.
217
218 - ``compare``: If true (the default), this field is included in the
219 generated equality and comparison methods (:meth:`__eq__`,
220 :meth:`__gt__`, et al.).
221
Barry Warsaw713a9362018-05-16 15:50:07 -0400222 - ``hash``: This can be a bool or ``None``. If true, this field is
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400223 included in the generated :meth:`__hash__` method. If ``None`` (the
224 default), use the value of ``compare``: this would normally be
225 the expected behavior. A field should be considered in the hash
226 if it's used for comparisons. Setting this value to anything
227 other than ``None`` is discouraged.
228
229 One possible reason to set ``hash=False`` but ``compare=True``
230 would be if a field is expensive to compute a hash value for,
231 that field is needed for equality testing, and there are other
232 fields that contribute to the type's hash value. Even if a field
233 is excluded from the hash, it will still be used for comparisons.
234
235 - ``metadata``: This can be a mapping or None. None is treated as
236 an empty dict. This value is wrapped in
237 :func:`~types.MappingProxyType` to make it read-only, and exposed
238 on the :class:`Field` object. It is not used at all by Data
239 Classes, and is provided as a third-party extension mechanism.
240 Multiple third-parties can each have their own key, to use as a
241 namespace in the metadata.
242
243 If the default value of a field is specified by a call to
244 :func:`field()`, then the class attribute for this field will be
245 replaced by the specified ``default`` value. If no ``default`` is
246 provided, then the class attribute will be deleted. The intent is
247 that after the :func:`dataclass` decorator runs, the class
248 attributes will all contain the default values for the fields, just
249 as if the default value itself were specified. For example,
250 after::
251
252 @dataclass
253 class C:
254 x: int
255 y: int = field(repr=False)
256 z: int = field(repr=False, default=10)
257 t: int = 20
258
259 The class attribute ``C.z`` will be ``10``, the class attribute
260 ``C.t`` will be ``20``, and the class attributes ``C.x`` and
261 ``C.y`` will not be set.
262
263.. class:: Field
264
265 :class:`Field` objects describe each defined field. These objects
266 are created internally, and are returned by the :func:`fields`
267 module-level method (see below). Users should never instantiate a
268 :class:`Field` object directly. Its documented attributes are:
269
270 - ``name``: The name of the field.
271
272 - ``type``: The type of the field.
273
274 - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``,
275 ``compare``, and ``metadata`` have the identical meaning and
276 values as they do in the :func:`field` declaration.
277
278 Other attributes may exist, but they are private and must not be
279 inspected or relied on.
280
281.. function:: fields(class_or_instance)
282
Barry Warsaw713a9362018-05-16 15:50:07 -0400283 Returns a tuple of :class:`Field` objects that define the fields for this
284 dataclass. Accepts either a dataclass, or an instance of a dataclass.
285 Raises :exc:`TypeError` if not passed a dataclass or instance of one.
286 Does not return pseudo-fields which are ``ClassVar`` or ``InitVar``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400287
288.. function:: asdict(instance, *, dict_factory=dict)
289
Barry Warsaw713a9362018-05-16 15:50:07 -0400290 Converts the dataclass ``instance`` to a dict (by using the
291 factory function ``dict_factory``). Each dataclass is converted
292 to a dict of its fields, as ``name: value`` pairs. dataclasses, dicts,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400293 lists, and tuples are recursed into. For example::
294
295 @dataclass
296 class Point:
297 x: int
298 y: int
299
300 @dataclass
301 class C:
Barry Warsaw713a9362018-05-16 15:50:07 -0400302 mylist: List[Point]
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400303
304 p = Point(10, 20)
305 assert asdict(p) == {'x': 10, 'y': 20}
306
307 c = C([Point(0, 0), Point(10, 4)])
Barry Warsaw713a9362018-05-16 15:50:07 -0400308 assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400309
Barry Warsaw713a9362018-05-16 15:50:07 -0400310 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400311
방성범 (Bang Seongbeom)508d8202018-09-29 19:50:31 +0900312.. function:: astuple(instance, *, tuple_factory=tuple)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400313
Barry Warsaw713a9362018-05-16 15:50:07 -0400314 Converts the dataclass ``instance`` to a tuple (by using the
315 factory function ``tuple_factory``). Each dataclass is converted
316 to a tuple of its field values. dataclasses, dicts, lists, and
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400317 tuples are recursed into.
318
319 Continuing from the previous example::
320
321 assert astuple(p) == (10, 20)
322 assert astuple(c) == ([(0, 0), (10, 4)],)
323
Barry Warsaw713a9362018-05-16 15:50:07 -0400324 Raises :exc:`TypeError` if ``instance`` is not a dataclass instance.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400325
326.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
327
Barry Warsaw713a9362018-05-16 15:50:07 -0400328 Creates a new dataclass with name ``cls_name``, fields as defined
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400329 in ``fields``, base classes as given in ``bases``, and initialized
330 with a namespace as given in ``namespace``. ``fields`` is an
331 iterable whose elements are each either ``name``, ``(name, type)``,
332 or ``(name, type, Field)``. If just ``name`` is supplied,
333 ``typing.Any`` is used for ``type``. The values of ``init``,
334 ``repr``, ``eq``, ``order``, ``unsafe_hash``, and ``frozen`` have
335 the same meaning as they do in :func:`dataclass`.
336
337 This function is not strictly required, because any Python
338 mechanism for creating a new class with ``__annotations__`` can
339 then apply the :func:`dataclass` function to convert that class to
Barry Warsaw713a9362018-05-16 15:50:07 -0400340 a dataclass. This function is provided as a convenience. For
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400341 example::
342
343 C = make_dataclass('C',
344 [('x', int),
345 'y',
346 ('z', int, field(default=5))],
347 namespace={'add_one': lambda self: self.x + 1})
348
349 Is equivalent to::
350
351 @dataclass
352 class C:
353 x: int
354 y: 'typing.Any'
355 z: int = 5
356
357 def add_one(self):
358 return self.x + 1
359
Serhiy Storchaka2d88e632019-06-26 19:07:44 +0300360.. function:: replace(instance, /, **changes)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400361
362 Creates a new object of the same type of ``instance``, replacing
363 fields with values from ``changes``. If ``instance`` is not a Data
364 Class, raises :exc:`TypeError`. If values in ``changes`` do not
365 specify fields, raises :exc:`TypeError`.
366
367 The newly returned object is created by calling the :meth:`__init__`
Barry Warsaw713a9362018-05-16 15:50:07 -0400368 method of the dataclass. This ensures that
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400369 :meth:`__post_init__`, if present, is also called.
370
371 Init-only variables without default values, if any exist, must be
372 specified on the call to :func:`replace` so that they can be passed to
373 :meth:`__init__` and :meth:`__post_init__`.
374
Barry Warsaw713a9362018-05-16 15:50:07 -0400375 It is an error for ``changes`` to contain any fields that are
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400376 defined as having ``init=False``. A :exc:`ValueError` will be raised
377 in this case.
378
379 Be forewarned about how ``init=False`` fields work during a call to
380 :func:`replace`. They are not copied from the source object, but
381 rather are initialized in :meth:`__post_init__`, if they're
382 initialized at all. It is expected that ``init=False`` fields will
383 be rarely and judiciously used. If they are used, it might be wise
384 to have alternate class constructors, or perhaps a custom
385 ``replace()`` (or similarly named) method which handles instance
386 copying.
387
388.. function:: is_dataclass(class_or_instance)
389
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200390 Return ``True`` if its parameter is a dataclass or an instance of one,
391 otherwise return ``False``.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400392
393 If you need to know if a class is an instance of a dataclass (and
394 not a dataclass itself), then add a further check for ``not
395 isinstance(obj, type)``::
396
397 def is_dataclass_instance(obj):
398 return is_dataclass(obj) and not isinstance(obj, type)
399
400Post-init processing
401--------------------
402
403The generated :meth:`__init__` code will call a method named
404:meth:`__post_init__`, if :meth:`__post_init__` is defined on the
405class. It will normally be called as ``self.__post_init__()``.
406However, if any ``InitVar`` fields are defined, they will also be
Barry Warsaw713a9362018-05-16 15:50:07 -0400407passed to :meth:`__post_init__` in the order they were defined in the
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400408class. If no :meth:`__init__` method is generated, then
409:meth:`__post_init__` will not automatically be called.
410
411Among other uses, this allows for initializing field values that
412depend on one or more other fields. For example::
413
414 @dataclass
415 class C:
416 a: float
417 b: float
418 c: float = field(init=False)
419
420 def __post_init__(self):
421 self.c = self.a + self.b
422
423See the section below on init-only variables for ways to pass
424parameters to :meth:`__post_init__`. Also see the warning about how
425:func:`replace` handles ``init=False`` fields.
426
427Class variables
428---------------
429
430One of two places where :func:`dataclass` actually inspects the type
431of a field is to determine if a field is a class variable as defined
432in :pep:`526`. It does this by checking if the type of the field is
433``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded
Barry Warsaw713a9362018-05-16 15:50:07 -0400434from consideration as a field and is ignored by the dataclass
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400435mechanisms. Such ``ClassVar`` pseudo-fields are not returned by the
436module-level :func:`fields` function.
437
438Init-only variables
439-------------------
440
441The other place where :func:`dataclass` inspects a type annotation is to
442determine if a field is an init-only variable. It does this by seeing
443if the type of a field is of type ``dataclasses.InitVar``. If a field
444is an ``InitVar``, it is considered a pseudo-field called an init-only
445field. As it is not a true field, it is not returned by the
446module-level :func:`fields` function. Init-only fields are added as
447parameters to the generated :meth:`__init__` method, and are passed to
448the optional :meth:`__post_init__` method. They are not otherwise used
Barry Warsaw713a9362018-05-16 15:50:07 -0400449by dataclasses.
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400450
Daniel Dương075b3c32018-08-24 16:19:24 +0700451For example, suppose a field will be initialized from a database, if a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400452value is not provided when creating the class::
453
454 @dataclass
455 class C:
456 i: int
457 j: int = None
458 database: InitVar[DatabaseType] = None
459
460 def __post_init__(self, database):
461 if self.j is None and database is not None:
462 self.j = database.lookup('j')
463
464 c = C(10, database=my_database)
465
466In this case, :func:`fields` will return :class:`Field` objects for ``i`` and
467``j``, but not for ``database``.
468
469Frozen instances
470----------------
471
472It is not possible to create truly immutable Python objects. However,
473by passing ``frozen=True`` to the :meth:`dataclass` decorator you can
Barry Warsaw713a9362018-05-16 15:50:07 -0400474emulate immutability. In that case, dataclasses will add
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400475:meth:`__setattr__` and :meth:`__delattr__` methods to the class. These
476methods will raise a :exc:`FrozenInstanceError` when invoked.
477
478There is a tiny performance penalty when using ``frozen=True``:
479:meth:`__init__` cannot use simple assignment to initialize fields, and
480must use :meth:`object.__setattr__`.
481
482Inheritance
483-----------
484
Barry Warsaw713a9362018-05-16 15:50:07 -0400485When the dataclass is being created by the :meth:`dataclass` decorator,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400486it looks through all of the class's base classes in reverse MRO (that
Barry Warsaw713a9362018-05-16 15:50:07 -0400487is, starting at :class:`object`) and, for each dataclass that it finds,
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400488adds the fields from that base class to an ordered mapping of fields.
489After all of the base class fields are added, it adds its own fields
490to the ordered mapping. All of the generated methods will use this
491combined, calculated ordered mapping of fields. Because the fields
492are in insertion order, derived classes override base classes. An
493example::
494
495 @dataclass
496 class Base:
497 x: Any = 15.0
498 y: int = 0
499
500 @dataclass
501 class C(Base):
502 z: int = 10
503 x: int = 15
504
505The final list of fields is, in order, ``x``, ``y``, ``z``. The final
506type of ``x`` is ``int``, as specified in class ``C``.
507
508The generated :meth:`__init__` method for ``C`` will look like::
509
510 def __init__(self, x: int = 15, y: int = 0, z: int = 10):
511
512Default factory functions
513-------------------------
514
515 If a :func:`field` specifies a ``default_factory``, it is called with
516 zero arguments when a default value for the field is needed. For
517 example, to create a new instance of a list, use::
518
Barry Warsaw713a9362018-05-16 15:50:07 -0400519 mylist: list = field(default_factory=list)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400520
521 If a field is excluded from :meth:`__init__` (using ``init=False``)
522 and the field also specifies ``default_factory``, then the default
523 factory function will always be called from the generated
524 :meth:`__init__` function. This happens because there is no other
525 way to give the field an initial value.
526
527Mutable default values
528----------------------
529
530 Python stores default member variable values in class attributes.
Barry Warsaw713a9362018-05-16 15:50:07 -0400531 Consider this example, not using dataclasses::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400532
533 class C:
534 x = []
535 def add(self, element):
Tom Faulknerda5e9472018-07-10 21:39:57 -0500536 self.x.append(element)
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400537
538 o1 = C()
539 o2 = C()
540 o1.add(1)
541 o2.add(2)
542 assert o1.x == [1, 2]
543 assert o1.x is o2.x
544
545 Note that the two instances of class ``C`` share the same class
546 variable ``x``, as expected.
547
Barry Warsaw713a9362018-05-16 15:50:07 -0400548 Using dataclasses, *if* this code was valid::
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400549
550 @dataclass
551 class D:
552 x: List = []
553 def add(self, element):
554 self.x += element
555
556 it would generate code similar to::
557
558 class D:
559 x = []
560 def __init__(self, x=x):
561 self.x = x
562 def add(self, element):
563 self.x += element
564
565 assert D().x is D().x
566
567 This has the same issue as the original example using class ``C``.
568 That is, two instances of class ``D`` that do not specify a value for
569 ``x`` when creating a class instance will share the same copy of
Barry Warsaw713a9362018-05-16 15:50:07 -0400570 ``x``. Because dataclasses just use normal Python class creation
571 they also share this behavior. There is no general way for Data
572 Classes to detect this condition. Instead, dataclasses will raise a
Eric V. Smith98d50cb2018-05-16 04:20:43 -0400573 :exc:`TypeError` if it detects a default parameter of type ``list``,
574 ``dict``, or ``set``. This is a partial solution, but it does protect
575 against many common errors.
576
577 Using default factory functions is a way to create new instances of
578 mutable types as default values for fields::
579
580 @dataclass
581 class D:
582 x: list = field(default_factory=list)
583
584 assert D().x is not D().x
Barry Warsaw713a9362018-05-16 15:50:07 -0400585
586Exceptions
587----------
588
589.. exception:: FrozenInstanceError
590
591 Raised when an implicitly defined :meth:`__setattr__` or
592 :meth:`__delattr__` is called on a dataclass which was defined with
593 ``frozen=True``.