-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
bugmypy got something wrongmypy got something wrongfalse-positivemypy gave an error on correct codemypy gave an error on correct codepriority-1-normaltopic-overloadstopic-type-variables
Description
Are you reporting a bug, or opening a feature request? Bug
MyPy has some strange behavior when type-checking overloaded functions with multiple generic parameters.
Example
from typing import Callable, TypeVar, Union, overload
T = TypeVar('T')
U = TypeVar('U')
@overload
def call(*, f: Callable[[], T]) -> T: ...
@overload
def call(*, u: U) -> U: ...
def call(*, f: Callable[[], T] = None, u: U = None) -> Union[T, U, None]:
return f() if f else u
Actual behavior
$ mypy example.py
example.py:12: error: Overloaded function implementation does not accept all possible arguments of signature 2
example.py:12: error: Overloaded function implementation cannot produce return type of signature 2
Found 2 errors in 1 file (checked 1 source file)
If I swap the order of the parameters on line 12 then mypy complains about signature 1 instead of signature 2.
def call(*, u: U = None, f: Callable[[], T] = None) -> Union[T, U, None]:
I can get mypy to accept the module by adding a dummy parameter in signature 2:
def call(*, f: None = None, u: U) -> U: ...
Expected behavior
$ mypy example.py
Success: no issues found in 1 source file
Versions
$ mypy --version
mypy 0.780
$ python3 --version
Python 3.8.1
Do you see the same issue after installing mypy from Git master? Yes
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrongfalse-positivemypy gave an error on correct codemypy gave an error on correct codepriority-1-normaltopic-overloadstopic-type-variables