Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
Bug description:
Since#106311 its documented in theinspect.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 theimplementation section. But actual code logic goes far away from this simple description:
Lines 2549 to 2562 in8e8ab75
| ifsigisnotNone: | |
| # 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 | |
| ifnotisinstance(sig, (Signature,str))andcallable(sig): | |
| sig=sig() | |
| ifisinstance(sig,str): | |
| sig=_signature_fromstr(sigcls,obj,sig) | |
| ifnotisinstance(sig,Signature): | |
| raiseTypeError( | |
| 'unexpected object {!r} in __signature__ ' | |
| 'attribute'.format(o_sig)) | |
| returnsig |
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