Kaydet (Commit) 3d70f7ae authored tarafından Dong-hee Na's avatar Dong-hee Na Kaydeden (comit) Eric V. Smith

bpo-33805: Improve error message of dataclasses.replace() (GH-7580)

üst 66ecefcf
......@@ -1173,6 +1173,9 @@ def replace(obj, **changes):
continue
if f.name not in changes:
if f._field_type is _FIELD_INITVAR:
raise ValueError(f"InitVar {f.name!r} "
'must be specified with replace()')
changes[f.name] = getattr(obj, f.name)
# Create the new object, which calls __init__() and
......
......@@ -3024,6 +3024,22 @@ class TestReplace(unittest.TestCase):
replace(c, x=5)
def test_initvar_is_specified(self):
@dataclass
class C:
x: int
y: InitVar[int]
def __post_init__(self, y):
self.x *= y
c = C(1, 10)
self.assertEqual(c.x, 10)
with self.assertRaisesRegex(ValueError, r"InitVar 'y' must be "
"specified with replace()"):
replace(c, x=3)
c = replace(c, x=3, y=5)
self.assertEqual(c.x, 15)
## def test_initvar(self):
## @dataclass
## class C:
......
Improve error message of dataclasses.replace() when an InitVar is not specified
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment