summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2015-05-14 22:47:17 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2015-05-14 22:47:17 (GMT)
commit3f6538fed0e2e8905805f3d30937cd41d26e032b (patch)
treead3a0855c22a5ae0098f442c87d513429a27d8b1 /Lib
parent6b4046f062760a26d7668b0f56ae34adf6cfcf2d (diff)
downloadcpython-3f6538fed0e2e8905805f3d30937cd41d26e032b.zip
cpython-3f6538fed0e2e8905805f3d30937cd41d26e032b.tar.gz
cpython-3f6538fed0e2e8905805f3d30937cd41d26e032b.tar.bz2
Issue 22547: Implement informative __repr__ for inspect.BoundArguments
Diffstat (limited to 'Lib')
-rw-r--r--Lib/inspect.py7
-rw-r--r--Lib/test/test_inspect.py7
2 files changed, 14 insertions, 0 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index ef2407c..9290b4b 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -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.
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index bbb7afa..6f813be 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -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):