Python泛型:如何从类属性推断泛型类型?

时间:2021-04-05 16:52:16

标签: python generics

假设我有多种请求类型,每种类型都对应一种响应类型。每个请求都表示为 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

但是,响应变量的推断类型不是我所期望的“str”,而是“Any”。

附言我指的是我的 IDE 提供的类型提示 (PyCharm)。

UPD: 我还想我可以在子类的定义中添加一个通用参数:

class GetIdRequest(Request[str]):

但这仍然不能解决问题。

0 个答案:

没有答案