diff options
-rw-r--r-- | Lib/dataclasses.py | 2 | ||||
-rw-r--r-- | Lib/test/test_dataclasses.py | 8 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst | 2 |
3 files changed, 11 insertions, 1 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index afc4b82..ceda822 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1017,7 +1017,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): str(inspect.signature(cls)).replace(' -> NoneType', '')) if '__match_args__' not in cls.__dict__: - cls.__match_args__ = tuple(f.name for f in flds if f.init) + cls.__match_args__ = tuple(f.name for f in field_list if f.init) abc.update_abstractmethods(cls) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 12c1918..29f29e1 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3432,6 +3432,14 @@ class TestMatchArgs(unittest.TestCase): __match_args__ = ma self.assertIs(C(42).__match_args__, ma) + def test_bpo_43764(self): + @dataclass(repr=False, eq=False, init=False) + class X: + a: int + b: int + c: int + self.assertEqual(X.__match_args__, ("a", "b", "c")) + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst b/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst new file mode 100644 index 0000000..838dd02 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst @@ -0,0 +1,2 @@ +Fix an issue where :data:`~object.__match_args__` generation could fail for +some :mod:`dataclasses`. |