@@ -3502,7 +3502,7 @@ def test_make_dataclasses(self):
35023502 self .assertEqual (C .__match_args__ , ('z' ,))
35033503
35043504
3505- class TestKwArgs (unittest .TestCase ):
3505+ class TestKeywordArgs (unittest .TestCase ):
35063506 def test_no_classvar_kwarg (self ):
35073507 msg = 'field a is a ClassVar but specifies kw_only'
35083508 with self .assertRaisesRegex (TypeError , msg ):
@@ -3659,6 +3659,34 @@ def __post_init__(self, b, d):
36593659 b = B (1 , c = 2 , b = 3 , d = 4 )
36603660 self .assertEqual (asdict (b ), {'a' : 3 , 'c' : 4 })
36613661
3662+ def test_defaults (self ):
3663+ # For kwargs, make sure we can have defaults after non-defaults.
3664+ @dataclass
3665+ class A :
3666+ a : int = 0
3667+ _ : KW_ONLY
3668+ b : int
3669+ c : int = 1
3670+ d : int
3671+
3672+ a = A (d = 4 , b = 3 )
3673+ self .assertEqual (a .a , 0 )
3674+ self .assertEqual (a .b , 3 )
3675+ self .assertEqual (a .c , 1 )
3676+ self .assertEqual (a .d , 4 )
3677+
3678+ # Make sure we still check for non-kwarg non-defaults not following
3679+ # defaults.
3680+ err_regex = "non-default argument 'z' follows default argument"
3681+ with self .assertRaisesRegex (TypeError , err_regex ):
3682+ @dataclass
3683+ class A :
3684+ a : int = 0
3685+ z : int
3686+ _ : KW_ONLY
3687+ b : int
3688+ c : int = 1
3689+ d : int
36623690
36633691if __name__ == '__main__' :
36643692 unittest .main ()
0 commit comments