[Python-checkins] cpython (merge 3.3 -> default): Issue #17071: Signature.bind() now works when one of the keyword arguments is

antoine.pitrou python-checkins at python.org
Tue Jan 29 21:24:57 CET 2013


http://hg.python.org/cpython/rev/4ff1dc8c0a3c
changeset: 81832:4ff1dc8c0a3c
parent: 81830:e24fd2c35d27
parent: 81831:49fd1c8aeca5
user: Antoine Pitrou <solipsis at pitrou.net>
date: Tue Jan 29 21:21:56 2013 +0100
summary:
 Issue #17071: Signature.bind() now works when one of the keyword arguments is named self.
files:
 Lib/inspect.py | 8 ++++----
 Lib/test/test_inspect.py | 10 ++++++++++
 Misc/NEWS | 5 ++++-
 3 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2028,19 +2028,19 @@
 
 return self._bound_arguments_cls(self, arguments)
 
- def bind(self, *args, **kwargs):
+ def bind(__bind_self, *args, **kwargs):
 '''Get a BoundArguments object, that maps the passed `args`
 and `kwargs` to the function's signature. Raises `TypeError`
 if the passed arguments can not be bound.
 '''
- return self._bind(args, kwargs)
+ return __bind_self._bind(args, kwargs)
 
- def bind_partial(self, *args, **kwargs):
+ def bind_partial(__bind_self, *args, **kwargs):
 '''Get a BoundArguments object, that partially maps the
 passed `args` and `kwargs` to the function's signature.
 Raises `TypeError` if the passed arguments can not be bound.
 '''
- return self._bind(args, kwargs, partial=True)
+ return __bind_self._bind(args, kwargs, partial=True)
 
 def __str__(self):
 result = []
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -2241,6 +2241,16 @@
 with self.assertRaisesRegex(TypeError, "parameter is positional only"):
 self.call(test, a_po=1, b_po=2)
 
+ def test_signature_bind_with_self_arg(self):
+ # Issue #17071: one of the parameters is named "self
+ def test(a, self, b):
+ pass
+ sig = inspect.signature(test)
+ ba = sig.bind(1, 2, 3)
+ self.assertEqual(ba.args, (1, 2, 3))
+ ba = sig.bind(1, self=2, b=3)
+ self.assertEqual(ba.args, (1, 2, 3))
+
 
 class TestBoundArguments(unittest.TestCase):
 def test_signature_bound_arguments_unhashable(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -236,10 +236,13 @@
 Library
 -------
 
+- Issue #17071: Signature.bind() now works when one of the keyword arguments
+ is named ``self``.
+
 - Issue #12004: Fix an internal error in PyZipFile when writing an invalid
 Python file. Patch by Ben Morgan.
 
-Have py_compile use importlib as much as possible to avoid code duplication.
+- Have py_compile use importlib as much as possible to avoid code duplication.
 
 - Issue #180022: Have site.addpackage() consider already known paths even when
 none are explicitly passed in. Bug report and fix by Kirill.
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /