Skip to content

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

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

Closed
alexkoay opened this issue Dec 5, 2021 · 0 comments · Fixed by #19183
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
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

Successfully merging a pull request may close this issue.

1 participant