diff options
author | Eric V. Smith <ericvsmith@users.noreply.github.com> | 2021-11-20 23:25:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-20 23:25:56 (GMT) |
commit | f7638dd0f90b2afd9295ee179119f4a29859953a (patch) | |
tree | 04bc6976b2408dad7095e71128f0ec57060f6f10 | |
parent | fdc0e09c3316098b038996c428e88931f0a4fcdb (diff) | |
download | cpython-f7638dd0f90b2afd9295ee179119f4a29859953a.zip cpython-f7638dd0f90b2afd9295ee179119f4a29859953a.tar.gz cpython-f7638dd0f90b2afd9295ee179119f4a29859953a.tar.bz2 |
Added kw_only parameter to make_dataclasses. (GH-29679)
-rw-r--r-- | Lib/dataclasses.py | 4 | ||||
-rw-r--r-- | Lib/test/test_dataclasses.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst | 1 |
3 files changed, 14 insertions, 2 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 1e98bf9..aca6050 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 bbbb8e6..b00d048 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 0000000..77479d7 --- /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(). |