Similar to #14002; came up in python/typeshed#9084.
from typing import TypeVar, Generic, overload T = TypeVar("T", str, int) class Base(Generic[T]): @overload def method(self, s: T) -> T: ... @overload def method(self: Base[str], s: bytes) -> str: ... def method(self, s: object): ... class Child(Base[int]): def method(self, s: int) -> int: raise NotImplementedError
(https://mypy-play.net/?mypy=latest&python=3.10&gist=da356a97851f7b7649d208e1359a6de4)
with mypy 1.1.1 produces:
/Users/jelle/bin/inerhit.py:13: error: Signature of "method" incompatible with supertype "Base" [override] /Users/jelle/bin/inerhit.py:13: note: Superclass: /Users/jelle/bin/inerhit.py:13: note: @overload /Users/jelle/bin/inerhit.py:13: note: def method(self, s: int) -> int /Users/jelle/bin/inerhit.py:13: note: @overload /Users/jelle/bin/inerhit.py:13: note: def method(self, s: bytes) -> str /Users/jelle/bin/inerhit.py:13: note: Subclass: /Users/jelle/bin/inerhit.py:13: note: def method(self, s: int) -> int Found 1 error in 1 file (checked 1 source file)
There should be no errors. The second overload is not applicable to a Base[int], so it should be fine that the subclass lacks it.
Fix incompatible overrides of overloaded generics with self types
Fix incompatible overrides of overloaded generics with self types (#1…
Activity
Fix incompatible overrides of overloaded generics with self types
Fix incompatible overrides of overloaded generics with self types (#1…