diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2013-01-29 21:21:56 +0100 |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2013-01-29 21:21:56 +0100 |
commit | 64a5562f4c92b6b99762f71d3506b4b0644cec70 (patch) | |
tree | c8fb769f9287f2f32ef8d35650aecfae0b0f4992 | |
parent | f7209225bbc386aa3dd49e5c2c601cd0906ccb53 (diff) | |
parent | bd41d1b14c03e76c6ebf396720eddba60f00c8dc (diff) | |
download | cpython-git-64a5562f4c92b6b99762f71d3506b4b0644cec70.tar.gz |
Issue #17071: Signature.bind() now works when one of the keyword arguments is named self.
-rw-r--r-- | Lib/inspect.py | 8 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 10 | ||||
-rw-r--r-- | Misc/NEWS | 5 |
3 files changed, 18 insertions, 5 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index c389f6adc6..3661316042 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2028,19 +2028,19 @@ class Signature: 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 index 0ab414d9fa..66ffe9133e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -2241,6 +2241,16 @@ class TestSignatureBind(unittest.TestCase): 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): @@ -236,10 +236,13 @@ Core and Builtins 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. |