Допустим, у меня есть несколько типов запросов, каждый из которых соответствует ровно одному типу ответа. Каждый запрос представлен подклассом от Request.

Еще есть функция, которая принимает Request в качестве аргумента и возвращает ответ (соответствующего типа). Хотелось бы иметь статические подсказки для конкретного возвращаемого типа ответа в зависимости от того, какой сабкласс Request был передан.

Я пробовал так:
 from typing import TypeVar, Generic, Type
ResponseType = TypeVar("ResponseType")
class Request(Generic[ResponseType]):
    response_type: Type[ResponseType]
class IsProcessedStartedRequest(Request):
    response_type = bool
class GetIdRequest(Request):
    response_type = str
def send_request(request: Request[ResponseType]) -> ResponseType:
    ...
request = GetIdRequest()   # inferred type: GetIdRequest
response = send_request(request)        # inferred type: Any

Однако, тип переменной response показывается как ‘Any’, а не как ‘str’.

P.S. Если это важно, то я говорю о статических подсказках в IDE PyCharm.