-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
bugmypy got something wrongmypy got something wrong
Description
This replaces #14509.
Bug Report
The order of declarations shouldn't matter to mypy w.r.t.1 type annotations when from __future__ import annotations
is in effect, but in the example that follows, they do.
To Reproduce
Analyze the following code with --strict
(or run on mypy-play.net):
from __future__ import annotations
import functools
from typing import (
Any,
Callable,
cast,
Counter,
Optional,
TypeVar,
)
Tc = TypeVar('Tc', bound=Callable[..., Any])
def func_wraps(wraps: Tc) -> Callable[[Callable[..., Any]], Tc]:
'''declare that one function wraps another
Args:
wraps: the function being wrapped
Returns:
a function 'decorator()', where...
Args:
the function which wraps 'wraps'
Returns:
the input argument, unchanged
The type annotations of the return value of the 'decorator()' will
be those of 'wraps'.
'''
def inner(wrapper: Callable[..., Any], /) -> Tc:
'''decorator
Args:
wrapper: the function which wraps 'wraps'
Returns:
the same function, unchanged
'''
wrapper_ = cast(Tc, wrapper)
return functools.wraps(wraps)(wrapper_)
return inner
def function1() -> ChildClass:
return ChildClass()
class ParentClass:
def __init__(self, *, param: Optional[int] = None) -> None:
_ = param
class ChildClass(ParentClass):
some_counter: Counter[int]
@func_wraps(ParentClass.__init__)
def __init__(self, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs)
self.some_counter = Counter()
def function2() -> ChildClass:
return ChildClass()
Expected Behavior
There should be no errors.
Actual Behavior
The following error is issued w.r.t.1 function1
:
bug.py:47: error: Returning Any from function declared to return "ChildClass" [no-any-return]
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 0.991, master (2023-01-24)
- Mypy command-line flags:
--show-error-codes --strict --warn-unreachable
- Mypy configuration options from
mypy.ini
(and other config files): N/A - Python version used: 3.8, 3.11
Footnotes
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrong