使用通用参数作为文字
Use a generic parameter as a Literal
我正在尝试创建一个 api,我有不同的函数来处理对 api 的请求。
某些方法 return 一个 204
响应,我想将方法的 return 类型提示为状态代码为 201 的响应。
def something() -> Response[204]:
...
我想创建一个真正的 Response
class 的子 class 将被 returned,然后只需设置 status_code
变量到文字 T
.
class Response(Generic[T], TheOtherResponseClass):
status_code: Literal[T]
我现在的问题是,如果可能的话,如何从 typing
模块中获取通用参数 T
与 Literal
对象一起使用?
这是我能想到的最接近的:
from typing import Generic, Literal, TypeVar
class TheOtherResponseClass:
status_code: int
T = TypeVar('T', bound=int)
class Response(Generic[T], TheOtherResponseClass):
status_code: T
class Response204(Response[Literal[204]]):
status_code: Literal[204] = 204
reveal_type(Response204.status_code)
运行 mypy
在那个文件上会给你
note: Revealed type is "Literal[204]"
我正在尝试创建一个 api,我有不同的函数来处理对 api 的请求。
某些方法 return 一个 204
响应,我想将方法的 return 类型提示为状态代码为 201 的响应。
def something() -> Response[204]:
...
我想创建一个真正的 Response
class 的子 class 将被 returned,然后只需设置 status_code
变量到文字 T
.
class Response(Generic[T], TheOtherResponseClass):
status_code: Literal[T]
我现在的问题是,如果可能的话,如何从 typing
模块中获取通用参数 T
与 Literal
对象一起使用?
这是我能想到的最接近的:
from typing import Generic, Literal, TypeVar
class TheOtherResponseClass:
status_code: int
T = TypeVar('T', bound=int)
class Response(Generic[T], TheOtherResponseClass):
status_code: T
class Response204(Response[Literal[204]]):
status_code: Literal[204] = 204
reveal_type(Response204.status_code)
运行 mypy
在那个文件上会给你
note: Revealed type is "Literal[204]"