summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/dataclasses.py2
-rw-r--r--Lib/test/test_dataclasses.py8
-rw-r--r--Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst2
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`.