Skip to content

Class typevars lose information from isinstance checks #5720

Closed
@msullivan

Description

@msullivan
from typing import Generic, TypeVar

T = TypeVar('T')

class C(Generic[T]):
    def foo(self, x: T) -> None:
        if isinstance(x, int):
            self.bar(x)

    def bar(self, x: T) -> None:
        pass

fails with Argument 1 to "bar" of "C" has incompatible type "int"; expected "T", even though x is obviously a T (that was its annotated type!)

Arguably this is just the Dreaded Intersection Bug (#3603) in a different manifestation?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions