overload-with-docstring (D418)
Derived from the pydocstyle linter.
What it does
Checks for @overload
function definitions that contain a docstring.
Why is this bad?
The @overload
decorator is used to define multiple compatible signatures
for a given function, to support type-checking. A series of @overload
definitions should be followed by a single non-decorated definition that
contains the implementation of the function.
@overload
function definitions should not contain a docstring; instead,
the docstring should be placed on the non-decorated definition that contains
the implementation.
Example
from typing import overload
@overload
def factorial(n: int) -> int:
"""Return the factorial of n."""
@overload
def factorial(n: float) -> float:
"""Return the factorial of n."""
def factorial(n):
"""Return the factorial of n."""
factorial.__doc__ # "Return the factorial of n."
Use instead:
from typing import overload
@overload
def factorial(n: int) -> int: ...
@overload
def factorial(n: float) -> float: ...
def factorial(n):
"""Return the factorial of n."""
factorial.__doc__ # "Return the factorial of n."