diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-06-26 09:49:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-26 09:49:42 (GMT) |
commit | 84634254fef19ab31439e88ec0213acb46bd7b1f (patch) | |
tree | 9ee2d54b050c52b9cb1199c37f552f61512f9c96 | |
parent | 571cefd8c7933f4917739dde43171558f109d63c (diff) | |
download | cpython-84634254fef19ab31439e88ec0213acb46bd7b1f.zip cpython-84634254fef19ab31439e88ec0213acb46bd7b1f.tar.gz cpython-84634254fef19ab31439e88ec0213acb46bd7b1f.tar.bz2 |
[3.13] gh-121025: Improve partialmethod.__repr__ (GH-121033) (#121037)
gh-121025: Improve partialmethod.__repr__ (GH-121033)
It no longer contains redundant commas and spaces.
(cherry picked from commit d2646e3f45e3e4e831ee2ae84d55b161a361d592)
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
-rw-r--r-- | Lib/functools.py | 16 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_events.py | 2 | ||||
-rw-r--r-- | Lib/test/test_functools.py | 8 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2024-06-26-10-13-40.gh-issue-121025.M-XXlV.rst | 2 |
4 files changed, 18 insertions, 10 deletions
diff --git a/Lib/functools.py b/Lib/functools.py index a80e1a6..3d0fd66 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -373,15 +373,13 @@ class partialmethod(object): self.keywords = keywords def __repr__(self): - args = ", ".join(map(repr, self.args)) - keywords = ", ".join("{}={!r}".format(k, v) - for k, v in self.keywords.items()) - format_string = "{module}.{cls}({func}, {args}, {keywords})" - return format_string.format(module=self.__class__.__module__, - cls=self.__class__.__qualname__, - func=self.func, - args=args, - keywords=keywords) + cls = type(self) + module = cls.__module__ + qualname = cls.__qualname__ + args = [repr(self.func)] + args.extend(map(repr, self.args)) + args.extend(f"{k}={v!r}" for k, v in self.keywords.items()) + return f"{module}.{qualname}({', '.join(args)})" def _make_unbound_method(self): def _method(cls_or_self, /, *args, **keywords): diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 88c85a3..c92bc81 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -2364,7 +2364,7 @@ class HandleTests(test_utils.TestCase): h = asyncio.Handle(cb, (), self.loop) cb_regex = r'<function HandleTests.test_handle_repr .*>' - cb_regex = fr'functools.partialmethod\({cb_regex}, , \)\(\)' + cb_regex = fr'functools.partialmethod\({cb_regex}\)\(\)' regex = fr'^<Handle {cb_regex} at {re.escape(filename)}:{lineno}>$' self.assertRegex(repr(h), regex) diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 26701ea..559213f 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -569,6 +569,14 @@ class TestPartialMethod(unittest.TestCase): method = functools.partialmethod(func=capture, a=1) def test_repr(self): + self.assertEqual(repr(vars(self.A)['nothing']), + 'functools.partialmethod({})'.format(capture)) + self.assertEqual(repr(vars(self.A)['positional']), + 'functools.partialmethod({}, 1)'.format(capture)) + self.assertEqual(repr(vars(self.A)['keywords']), + 'functools.partialmethod({}, a=2)'.format(capture)) + self.assertEqual(repr(vars(self.A)['spec_keywords']), + 'functools.partialmethod({}, self=1, func=2)'.format(capture)) self.assertEqual(repr(vars(self.A)['both']), 'functools.partialmethod({}, 3, b=4)'.format(capture)) diff --git a/Misc/NEWS.d/next/Library/2024-06-26-10-13-40.gh-issue-121025.M-XXlV.rst b/Misc/NEWS.d/next/Library/2024-06-26-10-13-40.gh-issue-121025.M-XXlV.rst new file mode 100644 index 0000000..38cad61 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-06-26-10-13-40.gh-issue-121025.M-XXlV.rst @@ -0,0 +1,2 @@ +Improve the :meth:`~object.__repr__` of :class:`functools.partialmethod`. +Patch by Bénédikt Tran. |