-
-
Notifications
You must be signed in to change notification settings - Fork 3k
"An implementation for an overloaded function is not allowed in a stub file" for overloaded type hint #19128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
It turns out I actually get this error even without a docstring: # tmp.pyi
from typing import overload
def fn1() -> None:
"""Call this function."""
@overload
def fn2(a: str) -> str: ...
@overload
def fn2(a: int) -> int: ...
def fn2(a: int | str) -> int | str: ... this still gives an error of
|
That error is correct and your code does exactly what the error tells you not to. A docstring might be a good use case for doing this though, so maybe we should relax the check. |
I'm sorry, I don't understand what the difference is between def fn1() -> None:
"""Call this function."""
@overload
def fn2(a: str) -> str: ...
@overload
def fn2(a: int) -> int: ...
def fn2(a: int | str) -> int | str:
"""Call this function.""" Why would mypy allow one but not the other? In the mypy stubs documentation it also says
|
The error is "An implementation for an overloaded function is not allowed in a stub file". The second one is an overloaded function, the first one isn't. |
Sorry, the part I'm confused about is not "overloaded function" it's "implementation". Neither of the two definitions are associated with any code body, so I wouldn't have expected either of them to be considered to have "an implementation". And especially because the first doesn't error, to a user the definition of "having an implementation" seems inconsistent. |
Overloaded function implementation refers to the whole @overload
def fn2(a: str) -> str: ...
@overload
def fn2(a: int) -> int: ... There's no point in adding the final signature to stub code, it is ignored when checking foreign calls and only affects checking the body of the implementation. |
I'm having a similar issue for documenting a C extension module. The error is expected; overloaded functions typically don't need an implementation definition inside stub files. Should it be placed inside only the last overload then? |
Bug Report
I'm documenting a compiled extension module written in Rust. I write docstrings in my .pyi file so that IDEs and API documentation can automatically pick up those docstrings.
Docstrings are allowed in functions but this errors when a function is overloaded.
To Reproduce
gives:
Note that this does not error on line 3 for the non-overloaded function.
Expected Behavior
Expected mypy to not error when a docstring is included on a function that has overloads.
Actual Behavior
Your Environment
Mypy version used:
Mypy command-line flags: None, just
uv run mypy tmp.pyi
Mypy configuration options from
mypy.ini
(and other config files): NonePython version used:
The text was updated successfully, but these errors were encountered: