diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/inspect.py | 3 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index e9c2dbd..dc2aab2 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2251,7 +2251,8 @@ def _signature_from_callable(obj, *, return sig else: sig_params = tuple(sig.parameters.values()) - assert first_wrapped_param is not sig_params[0] + assert (not sig_params or + first_wrapped_param is not sig_params[0]) new_params = (first_wrapped_param,) + sig_params return sig.replace(parameters=new_params) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 5543674..126b26e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -2526,6 +2526,16 @@ class TestSignatureObject(unittest.TestCase): ('c', 1, ..., 'keyword_only')), 'spam')) + class Spam: + def test(self: 'anno', x): + pass + + g = partialmethod(test, 1) + + self.assertEqual(self.signature(Spam.g), + ((('self', ..., 'anno', 'positional_or_keyword'),), + ...)) + def test_signature_on_fake_partialmethod(self): def foo(a): pass foo._partialmethod = 'spam' |