From b18a4cd6744b4cd6177b9002bfed3f59863955cf Mon Sep 17 00:00:00 2001 From: Iurii Kemaev Date: Tue, 9 Feb 2021 00:24:42 +0300 Subject: [PATCH 1/3] fix processing of empty dataclasses --- Lib/dataclasses.py | 2 +- Lib/test/test_dataclasses.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 0c4b47564b0605..97c961f1cf7915 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -851,7 +851,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # Only process classes that have been processed by our # decorator. That is, they have a _FIELDS attribute. base_fields = getattr(b, _FIELDS, None) - if base_fields: + if base_fields is not None: has_dataclass_bases = True for f in base_fields.values(): fields[f.name] = f diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 8887eb6461bc34..e5c41883a161b8 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2594,6 +2594,30 @@ class D(C): self.assertEqual(d.i, 0) self.assertEqual(d.j, 10) + def test_inherit_nonfrozen_from_empty_frozen(self): + @dataclass(frozen=True) + class C: + pass + + with self.assertRaisesRegex(TypeError, + 'cannot inherit non-frozen dataclass from a frozen one'): + @dataclass + class D(C): + j: int + + def test_inherit_nonfrozen_from_empty_(self): + @dataclass + class C: + pass + + @dataclass + class D(C): + j: int + + d = D(3) + self.assertEqual(d.j, 3) + self.assertIsInstance(d, C) + # Test both ways: with an intermediate normal (non-dataclass) # class and without an intermediate class. def test_inherit_nonfrozen_from_frozen(self): From 940d27b541de452d40c13682d50eb72201062a9b Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Tue, 9 Feb 2021 07:24:30 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst diff --git a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst new file mode 100644 index 00000000000000..66a175d21255c2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst @@ -0,0 +1 @@ +Fixed processing of empty dataclasses. \ No newline at end of file From a44e321a57cfa837e4fc4b485d5c7e5cd0377e75 Mon Sep 17 00:00:00 2001 From: Iurii Kemaev Date: Wed, 10 Feb 2021 23:45:03 +0300 Subject: [PATCH 3/3] fix typo --- Lib/test/test_dataclasses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index e5c41883a161b8..b2b0b82557d2b6 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2605,7 +2605,7 @@ class C: class D(C): j: int - def test_inherit_nonfrozen_from_empty_(self): + def test_inherit_nonfrozen_from_empty(self): @dataclass class C: pass