diff options
author | dhoekstra2000 <douwe.hoekstra2512@gmail.com> | 2021-05-10 13:30:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-10 13:30:22 (GMT) |
commit | 2a031723eefcf6f1d678bbb4f6018610d43623c4 (patch) | |
tree | 63aaac4ed8853eaec7f672ba637cd50612b635ad | |
parent | 45862f9f5ef5d3c9da37f35e4fe4b18618530cfa (diff) | |
download | cpython-2a031723eefcf6f1d678bbb4f6018610d43623c4.zip cpython-2a031723eefcf6f1d678bbb4f6018610d43623c4.tar.gz cpython-2a031723eefcf6f1d678bbb4f6018610d43623c4.tar.bz2 |
bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967)
-rw-r--r-- | Doc/library/dataclasses.rst | 21 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index bfba15e..e203a1a 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -491,6 +491,27 @@ depend on one or more other fields. For example:: def __post_init__(self): 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 parameters to :meth:`__post_init__`. Also see the warning about how :func:`replace` handles ``init=False`` fields. @@ -736,6 +736,7 @@ David Hobley Tim Hochberg Benjamin Hodgson Joerg-Cyril Hoehle +Douwe Hoekstra Gregor Hoffleit Chris Hoffman Tim Hoffmann diff --git a/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst new file mode 100644 index 0000000..b0ecb17 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst @@ -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.
\ No newline at end of file |