【发布时间】:2022-01-03 16:42:06
【问题描述】:
当创建一个基类时,其请求方法对所有子类都完全相同。似乎没有一种简单的方法可以根据发出请求的子类来提供单独的类型提示。
下面的例子是我目前解决这个问题的方法,但似乎有更好的方法。
class Response(TypeDict): ...
class FooResponse(Response): ...
class BarResponse(Response): ...
class Request:
@classmethod
def make_request(cls, args: Any) -> Response:
# This will return a dict response based on cls.TYPE (if cls.TYPE == Foo, FooResponse will be returned)
return execute_db_query(cls, args)
class FooRequest(Request):
@classmethod
def make_request(cls, args: Any) -> FooResponse:
return FooResponse(**super().make_request(cls, args))
class BarRequest(Request):
@classmethod
def make_request(cls, args: Any) -> BarResponse:
return BarResponse(**super().make_request(cls, args))
是否有更好的方法来做到这一点,要么通过在子类上指定响应类型,要么只覆盖方法签名而不覆盖功能?
类似的东西(我知道这不起作用):
class FooRequest(Request):
@classmethod
def make_request(...) -> FooResponse: ...
我认为使用像 Generic[T] 和 TypeVar() 这样的东西可能是一种方法吗?
【问题讨论】:
-
请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。
标签: python inheritance subclass type-hinting