(self)
| 5015 | self.assertEqual(C(42, b=10).__match_args__, ('a',)) |
| 5016 | |
| 5017 | def test_KW_ONLY(self): |
| 5018 | @dataclass |
| 5019 | class A: |
| 5020 | a: int |
| 5021 | _: KW_ONLY |
| 5022 | b: int |
| 5023 | c: int |
| 5024 | A(3, c=5, b=4) |
| 5025 | msg = "takes 2 positional arguments but 4 were given" |
| 5026 | with self.assertRaisesRegex(TypeError, msg): |
| 5027 | A(3, 4, 5) |
| 5028 | |
| 5029 | |
| 5030 | @dataclass(kw_only=True) |
| 5031 | class B: |
| 5032 | a: int |
| 5033 | _: KW_ONLY |
| 5034 | b: int |
| 5035 | c: int |
| 5036 | B(a=3, b=4, c=5) |
| 5037 | msg = "takes 1 positional argument but 4 were given" |
| 5038 | with self.assertRaisesRegex(TypeError, msg): |
| 5039 | B(3, 4, 5) |
| 5040 | |
| 5041 | # Explicitly make a field that follows KW_ONLY be non-keyword-only. |
| 5042 | @dataclass |
| 5043 | class C: |
| 5044 | a: int |
| 5045 | _: KW_ONLY |
| 5046 | b: int |
| 5047 | c: int = field(kw_only=False) |
| 5048 | c = C(1, 2, b=3) |
| 5049 | self.assertEqual(c.a, 1) |
| 5050 | self.assertEqual(c.b, 3) |
| 5051 | self.assertEqual(c.c, 2) |
| 5052 | c = C(1, b=3, c=2) |
| 5053 | self.assertEqual(c.a, 1) |
| 5054 | self.assertEqual(c.b, 3) |
| 5055 | self.assertEqual(c.c, 2) |
| 5056 | c = C(1, b=3, c=2) |
| 5057 | self.assertEqual(c.a, 1) |
| 5058 | self.assertEqual(c.b, 3) |
| 5059 | self.assertEqual(c.c, 2) |
| 5060 | c = C(c=2, b=3, a=1) |
| 5061 | self.assertEqual(c.a, 1) |
| 5062 | self.assertEqual(c.b, 3) |
| 5063 | self.assertEqual(c.c, 2) |
| 5064 | |
| 5065 | def test_KW_ONLY_as_string(self): |
| 5066 | @dataclass |
nothing calls this directly
no test coverage detected