Following #7188, we can now have: ```python from typing import overload from typing_extensions import Literal class Cat: @overload def __new__(cls, name: Literal['Tabby']) -> 'Tabby': ... @overload def __new__(cls, name: Literal['Kitty']) -> 'Kitty': ... def __new__(cls, name: str) -> 'Cat': ... class Kitty(Cat): pass class Tabby(Cat): pass reveal_type(Cat('Kitty')) reveal_type(Cat('Tabby')) ``` result in: ``` Revealed type is 'test.Kitty' Revealed type is 'test.Tabby' ``` (Meant as a trivial example.) However, this doesn't extend to derived classes: ```python reveal_type(Tabby('Kitty')) reveal_type(Tabby('Tabby')) ``` would result in: ``` Revealed type is 'test.Tabby' Revealed type is 'test.Tabby' ``` I'm using mypy 0.761.