You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The code sample contains a bug. The f function is using type variable T in an incorrect manner. A type variable scoped to a function should always appear in the return type annotation. In your example, the correct annotation for parameter b is T[Any]. If you make this change, the code type checks without error.
It may be a good idea for mypy to emit an error when a type variable is used in an incorrect manner like this. There was a discussion about this in the typing forums a while back. If I remember correctly, the authors of pyright, pytype and pyre all decided to add such an error (or warning), but mypy does not emit an error in this case.
I don't think that is the issue here. Edited to return T (T[Any] doesn't make sense as far as I understand).
from __future__ import annotations
from typing import Generic, TypeVar, cast
T = TypeVar("T")
class A(Generic[T]):
pass
class B(A[str]):
something: int = 0
def f(b: A[T]) -> T:
if isinstance(b, B):
print(b.something)
raise NotImplementedError()
but this still fails:
error: <nothing> has no attribute "something" [attr-defined]
Mypy believes that it is impossible for an
isinstance
to succeed if the known type has a generic and the subtype has specified that generic.To Reproduce
Expected Behavior
Mypy should have no problems with this code
Actual Behavior
Your Environment
mypy FILE
mypy.ini
(and other config files):The text was updated successfully, but these errors were encountered: