假设我有多种请求类型,每种类型都对应一种响应类型。每个请求都表示为 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]):
但这仍然不能解决问题。