diff options
author | Dong-hee Na <donghee.na92@gmail.com> | 2017-06-15 14:41:57 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-06-15 14:41:57 (GMT) |
commit | e45ea377b8d9ae23893d4587003c6d3e7f54b99a (patch) | |
tree | cf9720e2407bd4ce6be4ca7941ab7d801f2719ac /Lib/inspect.py | |
parent | cf58dfb44cc11d41ea1473cd7436618b210b8258 (diff) | |
download | cpython-e45ea377b8d9ae23893d4587003c6d3e7f54b99a.zip cpython-e45ea377b8d9ae23893d4587003c6d3e7f54b99a.tar.gz cpython-e45ea377b8d9ae23893d4587003c6d3e7f54b99a.tar.bz2 |
bpo-30149: Fix partialmethod without explicit self parameter (#1308) (#1662)
Diffstat (limited to 'Lib/inspect.py')
-rw-r--r-- | Lib/inspect.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 2894672..3317f58 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2241,11 +2241,16 @@ def _signature_from_callable(obj, *, sigcls=sigcls) sig = _signature_get_partial(wrapped_sig, partialmethod, (None,)) - first_wrapped_param = tuple(wrapped_sig.parameters.values())[0] - new_params = (first_wrapped_param,) + tuple(sig.parameters.values()) - - return sig.replace(parameters=new_params) + if first_wrapped_param.kind is Parameter.VAR_POSITIONAL: + # First argument of the wrapped callable is `*args`, as in + # `partialmethod(lambda *args)`. + return sig + else: + sig_params = tuple(sig.parameters.values()) + assert first_wrapped_param is not sig_params[0] + new_params = (first_wrapped_param,) + sig_params + return sig.replace(parameters=new_params) if isfunction(obj) or _signature_is_functionlike(obj): # If it's a pure Python function, or an object that is duck type |