Mypy doesn’t check types of empty functions, such as those whose implementation
... or only a docstring.
For example, running
mypy on this class:
class C: def pass_only(self) -> int: pass def elipsis_only(self) -> int: ... def docstring_only(self) -> int: """ Just a docstring, which implicitly returns `None`. """ def docstring_and_none_return_type(self) -> int: """ Now explicitly retiurn `None. """ return None def incorrect_return_type(self) -> int: return "x"
only picks up errors on the latter two methods where there is an explicit return value:
$ mypy --strict types_empty_methods.py example.py:17: error: Incompatible return value type (got "None", expected "int") [return-value] example.py:20: error: Incompatible return value type (got "str", expected "int") [return-value] Found 2 errors in 1 file (checked 1 source file)
Such empty functions are normally used to indicate that a subclass should provide a concrete implementation. However, real errors can occur if this is omitted:
>>> C().pass_only() + 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
This is true as of Mypy v0.982 and below, but looks like it will be fixed in a upcoming release.
Thanks to Sam Searles-Bryant, who showed this to me.