This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author antonio-caceres
Recipients antonio-caceres
Date 2021-09-03.01:25:32
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1630632332.35.0.622998937307.issue45091@roundup.psfhosted.org>
In-reply-to
Content
The __str__ method of the inspect.Parameter class in the standard library's inspect module does not include subscripted types in annotations.

For example, consider the function foo(a: list[int]).
When I run str(inspect.signature(foo)), I would expect the returned string to be '(a: list[int])', but instead the string is '(a: list)'.

(I have tested this on Python 3.9.7, but the code I believe is the problem is on the branches for versions 3.9-3.11.) 

From a first glance at the source code, the problem is in the inspect.formatannotation function. If the annotation is a type, the formatannotation uses the __qualname__ attribute of the annotation instead of its __repr__ attribute. Indeed, list[int].__qualname__ == 'list' and repr(list[int]) == 'list[int]'. This problem was probably code that should have been changed, but never was, after PEP 585.

The only workarounds I have found is to implement an alternative string method that accepts inspect.Signature or subclass inspect.Parameter and override the __str__ method.
History
Date User Action Args
2021-09-03 01:25:32antonio-caceressetrecipients: + antonio-caceres
2021-09-03 01:25:32antonio-caceressetmessageid: <1630632332.35.0.622998937307.issue45091@roundup.psfhosted.org>
2021-09-03 01:25:32antonio-cacereslinkissue45091 messages
2021-09-03 01:25:32antonio-cacerescreate