From f7638dd0f90b2afd9295ee179119f4a29859953a Mon Sep 17 00:00:00 2001 From: "Eric V. Smith" Date: Sat, 20 Nov 2021 18:25:56 -0500 Subject: [PATCH] Added kw_only parameter to make_dataclasses. (GH-29679) --- Lib/dataclasses.py | 4 ++-- Lib/test/test_dataclasses.py | 11 +++++++++++ .../Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 1e98bf9b9bb..aca60501d0e 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1326,7 +1326,7 @@ def _astuple_inner(obj, tuple_factory): def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, - frozen=False, match_args=True, slots=False): + frozen=False, match_args=True, kw_only=False, slots=False): """Return a new dynamically created dataclass. The dataclass name will be 'cls_name'. 'fields' is an iterable @@ -1393,7 +1393,7 @@ def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, # Apply the normal decorator. return dataclass(cls, init=init, repr=repr, eq=eq, order=order, unsafe_hash=unsafe_hash, frozen=frozen, - match_args=match_args, slots=slots) + match_args=match_args, kw_only=kw_only, slots=slots) def replace(obj, /, **changes): diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index bbbb8e6c639..b00d0484d38 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3864,5 +3864,16 @@ class TestKeywordArgs(unittest.TestCase): c: int = 1 d: int + def test_make_dataclass(self): + A = make_dataclass("A", ['a'], kw_only=True) + self.assertTrue(fields(A)[0].kw_only) + + B = make_dataclass("B", + ['a', ('b', int, field(kw_only=False))], + kw_only=True) + self.assertTrue(fields(B)[0].kw_only) + self.assertFalse(fields(B)[1].kw_only) + + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst b/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst new file mode 100644 index 00000000000..77479d7db47 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst @@ -0,0 +1 @@ +Added missing kw_only parameter to dataclasses.make_dataclass().