Kaydet (Commit) 64a5562f authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #17071: Signature.bind() now works when one of the keyword arguments is named self.

...@@ -2028,19 +2028,19 @@ class Signature: ...@@ -2028,19 +2028,19 @@ class Signature:
return self._bound_arguments_cls(self, arguments) 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` '''Get a BoundArguments object, that maps the passed `args`
and `kwargs` to the function's signature. Raises `TypeError` and `kwargs` to the function's signature. Raises `TypeError`
if the passed arguments can not be bound. 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 '''Get a BoundArguments object, that partially maps the
passed `args` and `kwargs` to the function's signature. passed `args` and `kwargs` to the function's signature.
Raises `TypeError` if the passed arguments can not be bound. 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): def __str__(self):
result = [] result = []
......
...@@ -2241,6 +2241,16 @@ class TestSignatureBind(unittest.TestCase): ...@@ -2241,6 +2241,16 @@ class TestSignatureBind(unittest.TestCase):
with self.assertRaisesRegex(TypeError, "parameter is positional only"): with self.assertRaisesRegex(TypeError, "parameter is positional only"):
self.call(test, a_po=1, b_po=2) 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): class TestBoundArguments(unittest.TestCase):
def test_signature_bound_arguments_unhashable(self): def test_signature_bound_arguments_unhashable(self):
......
...@@ -236,10 +236,13 @@ Core and Builtins ...@@ -236,10 +236,13 @@ Core and Builtins
Library 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 - Issue #12004: Fix an internal error in PyZipFile when writing an invalid
Python file. Patch by Ben Morgan. 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 - Issue #180022: Have site.addpackage() consider already known paths even when
none are explicitly passed in. Bug report and fix by Kirill. none are explicitly passed in. Bug report and fix by Kirill.
......
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