Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Closed
Description
Bug report
importinspectdeftest_1():classFooStaticmethod:@staticmethoddef__call__(cls,s,l,t):returntinstance=FooStaticmethod()instance(1,2,3,4)# Success call with 4 argsassertlist(inspect.signature(instance).parameters.keys())== ['cls','s','l','t']deftest_2():classFooClassmethod:@classmethoddef__call__(cls,s,l,t):returntinstance=FooClassmethod()instance(1,2,3)# Success call with 4 argsassertlist(inspect.signature(instance).parameters.keys())== ['s','l','t']deftest_3():classFooStaticmethod:@staticmethoddef__call__():returnNoneinstance=FooStaticmethod()instance()assertlist(inspect.signature(instance).parameters.keys())== []
Your environment
CPython versions tested on:
- Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32
- Python 3.11.1 (tags/v3.11.1:a7a450f, Dec 6 2022, 19:58:39) [MSC v.1934 64 bit (AMD64)] on win32
Possible fix
The problem is that we are calling_signature_from_callable twice withskip_bound_arg=True.
A simple solution is to call_get_signature_of withskip_bound_arg=False on
Line 2610 inf02fa64
| sig=_get_signature_of(call) |
That fix thetest_2 but not thetest_1. I need to think about how to do better. I will be glad to your suggestions.
Р.S I would like to submit a pull request.
Linked PRs
- gh-101293: Fix inspect.signature behavior on
__call__decorated withstaticmethodandclassmethoddecorators. #102564 - gh-101293: Fix support of custom callables and types in inspect.Signature.from_callable() #115530
- [3.11] gh-101293: Fix support of custom callables and types in inspect.Signature.from_callable() (GH-115530) #116197
- [3.12] gh-101293: Fix support of custom callables and types in inspect.Signature.from_callable() (GH-115530) #116198