Skip to content

Incorrect incompatible override report with self type + overload + TypeVar with constraints #14866

Closed
@JelleZijlstra

Description

@JelleZijlstra

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    affects-typeshedAnything that blocks a typeshed changebugmypy got something wrongtopic-inheritanceInheritance and incompatible overridestopic-self-typesTypes for self

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions