From: Brandt Bucher Date: Thu, 8 Apr 2021 19:54:34 +0000 (-0700) Subject: bpo-43764: Fix `__match_args__` generation logic for dataclasses (GH-25284) X-Git-Tag: v3.10.0b1~363 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d92c59f48680122ce0e4d1ccf69d92b983e8db01;p=thirdparty%2FPython%2Fcpython.git bpo-43764: Fix `__match_args__` generation logic for dataclasses (GH-25284) --- diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index afc4b8282abe..ceda8220f1f6 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 12c1918602d6..29f29e1e6895 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 000000000000..838dd0200f1d --- /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`.