Open
Description
Bug Report, To Reproduce, & Actual Behaviour
See mypy Playground:
from typing_extensions import Generic, TypeVar
T1 = TypeVar("T1")
T2 = TypeVar("T2", default=T1)
class MyClass(Generic[T1, T2]): ...
reveal_type(MyClass[int]) # N: Revealed type is "def [T2 = builtins.int] () -> __main__.MyClass[builtins.int, T2`2 = builtins.int]"
# `T2` now defaults to `int` for `MyClass` from now on
reveal_type(MyClass[str]) # N: Revealed type is "def [T2 = builtins.int] () -> __main__.MyClass[builtins.str, T2`2 = builtins.int]"
reveal_type(MyClass[bytes]) # N: Revealed type is "def [T2 = builtins.int] () -> __main__.MyClass[builtins.bytes, T2`2 = builtins.int]"
Expected Behavior
reveal_type(MyClass[str]) # N: Revealed type is "def [T2 = builtins.str] () -> __main__.MyClass[builtins.str, T2`2 = builtins.str]"
reveal_type(MyClass[bytes]) # N: Revealed type is "def [T2 = builtins.bytes] () -> __main__.MyClass[builtins.bytes, T2`2 = builtins.bytes]"
Your Environment
- Mypy version used: 1.15, 1.16
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini
(and other config files): None - Python version used: 3.9, 3.12