mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
[3.14] gh-132493: Remove __annotations__ usage in inspect._signature_is_functionlike (GH-133415) (#133796)
gh-132493: Remove __annotations__ usage in inspect._signature_is_functionlike (GH-133415)
This check is potentially problematic because it could force evaluation of
annotations unnecessarily. This doesn't trigger for builtin objects (functions,
classes, or modules) with annotations, but it could trigger for third-party objects.
The check was not particularly useful anyway, because it succeeds if ``__annotations__``
is a dict or None, so the only thing this did was guard against objects that have an
``__annotations__`` attribute that is of some other type. That doesn't seem particularly
useful, so I just removed the check.
(cherry picked from commit cb6596c6aa
)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
1ce68f6297
commit
dc441efbd0
3 changed files with 34 additions and 3 deletions
|
@ -2074,13 +2074,11 @@ def _signature_is_functionlike(obj):
|
|||
code = getattr(obj, '__code__', None)
|
||||
defaults = getattr(obj, '__defaults__', _void) # Important to use _void ...
|
||||
kwdefaults = getattr(obj, '__kwdefaults__', _void) # ... and not None here
|
||||
annotations = getattr(obj, '__annotations__', None)
|
||||
|
||||
return (isinstance(code, types.CodeType) and
|
||||
isinstance(name, str) and
|
||||
(defaults is None or isinstance(defaults, tuple)) and
|
||||
(kwdefaults is None or isinstance(kwdefaults, dict)) and
|
||||
(isinstance(annotations, (dict)) or annotations is None) )
|
||||
(kwdefaults is None or isinstance(kwdefaults, dict)))
|
||||
|
||||
|
||||
def _signature_strip_non_python_syntax(signature):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue