summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-26 09:49:42 (GMT)
committerGitHub <noreply@github.com>2024-06-26 09:49:42 (GMT)
commit84634254fef19ab31439e88ec0213acb46bd7b1f (patch)
tree9ee2d54b050c52b9cb1199c37f552f61512f9c96
parent571cefd8c7933f4917739dde43171558f109d63c (diff)
downloadcpython-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.py16
-rw-r--r--Lib/test/test_asyncio/test_events.py2
-rw-r--r--Lib/test/test_functools.py8
-rw-r--r--Misc/NEWS.d/next/Library/2024-06-26-10-13-40.gh-issue-121025.M-XXlV.rst2
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.