mirror of https://github.com/python/cpython
bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967)
This commit is contained in:
parent
45862f9f5e
commit
2a031723ee
|
@ -491,6 +491,27 @@ depend on one or more other fields. For example::
|
||||||
def __post_init__(self):
|
def __post_init__(self):
|
||||||
self.c = self.a + self.b
|
self.c = self.a + self.b
|
||||||
|
|
||||||
|
The :meth:`__init__` method generated by :func:`dataclass` does not call base
|
||||||
|
class :meth:`__init__` methods. If the base class has an :meth:`__init__` method
|
||||||
|
that has to be called, it is common to call this method in a
|
||||||
|
:meth:`__post_init__` method::
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Rectangle:
|
||||||
|
height: float
|
||||||
|
width: float
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Square(Rectangle):
|
||||||
|
side: float
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
super().__init__(self.side, self.side)
|
||||||
|
|
||||||
|
Note, however, that in general the dataclass-generated :meth:`__init__` methods
|
||||||
|
don't need to be called, since the derived dataclass will take care of
|
||||||
|
initializing all fields of any base class that is a dataclass itself.
|
||||||
|
|
||||||
See the section below on init-only variables for ways to pass
|
See the section below on init-only variables for ways to pass
|
||||||
parameters to :meth:`__post_init__`. Also see the warning about how
|
parameters to :meth:`__post_init__`. Also see the warning about how
|
||||||
:func:`replace` handles ``init=False`` fields.
|
:func:`replace` handles ``init=False`` fields.
|
||||||
|
|
|
@ -736,6 +736,7 @@ David Hobley
|
||||||
Tim Hochberg
|
Tim Hochberg
|
||||||
Benjamin Hodgson
|
Benjamin Hodgson
|
||||||
Joerg-Cyril Hoehle
|
Joerg-Cyril Hoehle
|
||||||
|
Douwe Hoekstra
|
||||||
Gregor Hoffleit
|
Gregor Hoffleit
|
||||||
Chris Hoffman
|
Chris Hoffman
|
||||||
Tim Hoffmann
|
Tim Hoffmann
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Add the remark to :mod:`dataclasses` documentation that the :meth:`__init__` of any base class
|
||||||
|
has to be called in :meth:`__post_init__`, along with a code example.
|
Loading…
Reference in New Issue