diff options
author | Zackery Spytz <zspytz@gmail.com> | 2021-04-05 19:41:01 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-05 19:41:01 (GMT) |
commit | 75220674c07abfc90c2cd7862d04cfa2e2354450 (patch) | |
tree | 7da8600bce2e46bd148120f8dc5044946fb6385a /Lib/test/test_dataclasses.py | |
parent | 14829b09eb652f457cf837836909169746a810f0 (diff) | |
download | cpython-75220674c07abfc90c2cd7862d04cfa2e2354450.zip cpython-75220674c07abfc90c2cd7862d04cfa2e2354450.tar.gz cpython-75220674c07abfc90c2cd7862d04cfa2e2354450.tar.bz2 |
bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867)
Co-Authored-By: Claudiu Popa <pcmanticore@gmail.com>
Automerge-Triggered-By: GH:ericvsmith
Diffstat (limited to 'Lib/test/test_dataclasses.py')
-rw-r--r-- | Lib/test/test_dataclasses.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 0bfed41..4f5c3c8 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3251,6 +3251,24 @@ class TestReplace(unittest.TestCase): c = replace(c, x=3, y=5) self.assertEqual(c.x, 15) + def test_initvar_with_default_value(self): + @dataclass + class C: + x: int + y: InitVar[int] = None + z: InitVar[int] = 42 + + def __post_init__(self, y, z): + if y is not None: + self.x += y + if z is not None: + self.x += z + + c = C(x=1, y=10, z=1) + self.assertEqual(replace(c), C(x=12)) + self.assertEqual(replace(c, y=4), C(x=12, y=4, z=42)) + self.assertEqual(replace(c, y=4, z=1), C(x=12, y=4, z=1)) + def test_recursive_repr(self): @dataclass class C: |