summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordhoekstra2000 <douwe.hoekstra2512@gmail.com>2021-05-10 13:30:22 (GMT)
committerGitHub <noreply@github.com>2021-05-10 13:30:22 (GMT)
commit2a031723eefcf6f1d678bbb4f6018610d43623c4 (patch)
tree63aaac4ed8853eaec7f672ba637cd50612b635ad
parent45862f9f5ef5d3c9da37f35e4fe4b18618530cfa (diff)
downloadcpython-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.rst21
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst2
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.
diff --git a/Misc/ACKS b/Misc/ACKS
index 480a486..b023bcb 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -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