Commit 3277f620 authored by Yury Selivanov's avatar Yury Selivanov

Issue 22547: Implement informative __repr__ for inspect.BoundArguments

parent a6db7b98
......@@ -2460,6 +2460,13 @@ class BoundArguments:
def __getstate__(self):
return {'_signature': self._signature, 'arguments': self.arguments}
def __repr__(self):
args = []
for arg, value in self.arguments.items():
args.append('{}={!r}'.format(arg, value))
return '<{} at {:#x} ({})>'.format(self.__class__.__name__,
id(self), ', '.join(args))
class Signature:
"""A Signature object represents the overall signature of a function.
......
......@@ -3149,6 +3149,13 @@ class TestBoundArguments(unittest.TestCase):
ba_pickled = pickle.loads(pickle.dumps(ba, ver))
self.assertEqual(ba, ba_pickled)
def test_signature_bound_arguments_repr(self):
def foo(a, b, *, c:1={}, **kw) -> {42:'ham'}: pass
sig = inspect.signature(foo)
ba = sig.bind(20, 30, z={})
self.assertRegex(repr(ba),
r'<BoundArguments at 0x[a-fA-F0-9]+ \(a=20,.*\}\}\)>')
class TestSignaturePrivateHelpers(unittest.TestCase):
def test_signature_get_bound_param(self):
......
......@@ -125,6 +125,9 @@ Library
- Issue 24184: Add AsyncIterator and AsyncIterable ABCs to
collections.abc. Contributed by Yury Selivanov.
- Issue 22547: Implement informative __repr__ for inspect.BoundArguments.
Contributed by Yury Selivanov.
Tests
-----
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment