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
Following up on my previous issue, it seems TypeVars are bugged and do not allow for more specific subclasses of one of the bound types specific, unlike using Unions alone?
See the 2 generic types represented by the variables "CombinedTypes" and "T"
Environment
Mypy version used: 0.950 and 0.960
Mypy command-line flags: None
Mypy configuration options from mypy.ini (and other config files): None
Python version used: Python 3.10.4
Operating system and version: Windows 10 (Version 21H2)
Full simplified test code to reproduce the bug
from abc import ABCMeta
from typing import Generic, TypeVar, Union
class BaseEngine(metaclass=ABCMeta):
pass
class BaseEngineVariantA(BaseEngine):
pass
class BaseEngineVariantB(BaseEngine):
pass
class VariantAConcreteEngine(BaseEngineVariantA):
pass
CombinedTypes = Union[BaseEngineVariantA, BaseEngineVariantB]
T = TypeVar('T', bound=CombinedTypes)
class IBase(Generic[T], metaclass=ABCMeta):
def __init__(self, engine: T):
self.engine = engine
class IAction(IBase[T], metaclass=ABCMeta):
pass
class ErrorIfUsingTypeVar(IBase[T]):
def __init__(self, something: T, actions_injected: type[IAction[T]]) -> None:
self.something = something
self.actions_injected = actions_injected
def foo(self) -> None:
if not isinstance(self.something, VariantAConcreteEngine):
raise Exception("HI")
self.actions_injected(self.something) # Gives a mypy error of - error: Argument 1 to "IAction" has incompatible type "VariantAConcreteEngine"; expected "T"
class WorksFineUsingUnionsAlone(IBase[CombinedTypes]):
def __init__(self, something: CombinedTypes, actions_injected: type[IAction[CombinedTypes]]) -> None:
self.something = something
self.actions_injected = actions_injected
def foo(self) -> None:
if not isinstance(self.something, VariantAConcreteEngine):
raise Exception("HI")
self.actions_injected(self.something) # No error if using unions alone
The text was updated successfully, but these errors were encountered:
Uh oh!
There was an error while loading. Please reload this page.
Following up on my previous issue, it seems TypeVars are bugged and do not allow for more specific subclasses of one of the bound types specific, unlike using Unions alone?
See the 2 generic types represented by the variables "CombinedTypes" and "T"
Environment
mypy.ini
(and other config files): NoneFull simplified test code to reproduce the bug
The text was updated successfully, but these errors were encountered: