-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
docsDocumentation in the Doc dirDocumentation in the Doc dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Since #106311 its documented in the inspect.signature() sphinx docs as:
"If the passed object has a __signature__ attribute, this function returns it without further computations."
That looks correct per PEP 362, see the implementation section. But actual code logic goes far away from this simple description:
Lines 2549 to 2562 in 8e8ab75
| if sig is not None: | |
| # since __text_signature__ is not writable on classes, __signature__ | |
| # may contain text (or be a callable that returns text); | |
| # if so, convert it | |
| o_sig = sig | |
| if not isinstance(sig, (Signature, str)) and callable(sig): | |
| sig = sig() | |
| if isinstance(sig, str): | |
| sig = _signature_fromstr(sigcls, obj, sig) | |
| if not isinstance(sig, Signature): | |
| raise TypeError( | |
| 'unexpected object {!r} in __signature__ ' | |
| 'attribute'.format(o_sig)) | |
| return sig |
Either we should document this properly (then this is a documentation issue). Or we could change the code and remove undocumented logic. As this attribute was documented recently, I'll suggest the second option.
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
- gh-115937: remove extra processing for the __signature__ attribute #115984
- gh-115937: Remove implementation details from inspect.signature() docs #116086
- [3.12] gh-115937: Remove implementation details from inspect.signature() docs (GH-116086) #116106
- [3.11] gh-115937: Remove implementation details from inspect.signature() docs (GH-116086) #116107
Gouvernathor and griels
Metadata
Metadata
Assignees
Labels
docsDocumentation in the Doc dirDocumentation in the Doc dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error