aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-05-30 03:28:31 +0200
committerGitHub <noreply@github.com>2024-05-30 01:28:31 +0000
commit06c62d697a87822690342cd0d99d1cdbeca4ce9d (patch)
tree5c654d18a4cecf0af6e9d2ff7dc4570a834ee4d6
parent[3.13] gh-117398: Add multiphase support to _datetime (gh-119694) (diff)
downloadcpython-06c62d697a87822690342cd0d99d1cdbeca4ce9d.tar.gz
cpython-06c62d697a87822690342cd0d99d1cdbeca4ce9d.tar.bz2
cpython-06c62d697a87822690342cd0d99d1cdbeca4ce9d.zip
[3.13] gh-119260: Clarify is_dataclass Behavior for Subclasses in Documentation and Tests (GH-119480) (#119760)
gh-119260: Clarify is_dataclass Behavior for Subclasses in Documentation and Tests (GH-119480) (cherry picked from commit bf4ff3ad2e362801e87c85fffd9e140b774cef26) Co-authored-by: Aditya Borikar <adityaborikar2@gmail.com> Co-authored-by: Carl Meyer <carl@oddbird.net>
-rw-r--r--Doc/library/dataclasses.rst4
-rw-r--r--Lib/test/test_dataclasses/__init__.py18
2 files changed, 20 insertions, 2 deletions
diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst
index cf707ca5b68..fcb5e8bad29 100644
--- a/Doc/library/dataclasses.rst
+++ b/Doc/library/dataclasses.rst
@@ -461,8 +461,8 @@ Module contents
.. function:: is_dataclass(obj)
- Return ``True`` if its parameter is a dataclass or an instance of one,
- otherwise return ``False``.
+ Return ``True`` if its parameter is a dataclass (including subclasses of a
+ dataclass) or an instance of one, otherwise return ``False``.
If you need to know if a class is an instance of a dataclass (and
not a dataclass itself), then add a further check for ``not
diff --git a/Lib/test/test_dataclasses/__init__.py b/Lib/test/test_dataclasses/__init__.py
index 04dd9f3265b..ffb8bbe75c5 100644
--- a/Lib/test/test_dataclasses/__init__.py
+++ b/Lib/test/test_dataclasses/__init__.py
@@ -1547,6 +1547,24 @@ class TestCase(unittest.TestCase):
self.assertTrue(is_dataclass(type(a)))
self.assertTrue(is_dataclass(a))
+ def test_is_dataclass_inheritance(self):
+ @dataclass
+ class X:
+ y: int
+
+ class Z(X):
+ pass
+
+ self.assertTrue(is_dataclass(X), "X should be a dataclass")
+ self.assertTrue(
+ is_dataclass(Z),
+ "Z should be a dataclass because it inherits from X",
+ )
+ z_instance = Z(y=5)
+ self.assertTrue(
+ is_dataclass(z_instance),
+ "z_instance should be a dataclass because it is an instance of Z",
+ )
def test_helper_fields_with_class_instance(self):
# Check that we can call fields() on either a class or instance,