Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeVar resolved to a concrete type using isinstance causes mypy to become confused at the equivalence #11664

Open
alexkoay opened this issue Dec 5, 2021 · 0 comments
Labels
bug mypy got something wrong

Comments

@alexkoay
Copy link

alexkoay commented Dec 5, 2021

Bug Report

To Reproduce

from typing import Any, Generic, TypeVar
T = TypeVar("T")

class Foo(Generic[T]):
    def __init__(self, value: T):
        self.value = value

def identity(value: T) -> Foo[T]:
    if isinstance(value, str):
        return Foo(value)
    return Foo(value)

Expected Behavior

mypy should be able to tell that in the type-guarded block, T == str and use that to qualify the types.

Actual Behavior

mypy reports an error Argument 1 to "Foo" has incompatible type "str"; expected "T" in the type-guarded block in identity().

Your Environment

  • Mypy version used: 0.910
  • Mypy command-line flags: N/A
  • Mypy configuration options from mypy.ini (and other config files): N/A
  • Python version used: 3.9
  • Operating system and version: Windows 10
@alexkoay alexkoay added the bug mypy got something wrong label Dec 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong
Projects
None yet
Development

No branches or pull requests

1 participant