【发布时间】:2020-08-27 04:36:39
【问题描述】:
typing.Callable 接受两个“参数”:参数类型和返回类型。对于任意参数,参数类型应该是 ...,或者是显式类型列表(例如,[str, str, int])。
有没有办法表示Callables 具有完全相同但任意的泛型签名?
例如,假设我想要一个接受函数并返回具有相同签名的函数的函数,如果我事先知道函数签名,我可以这样做:
def fn_combinator(*fn:Callable[[Some, Argument, Types], ReturnType]) -> Callable[[Some, Argument, Types], ReturnType]:
...
但是,我预先不知道参数类型,我希望我的组合器具有适当的通用性。我曾希望这会奏效:
ArgT = TypeVar("ArgT")
RetT = TypeVar("RetT")
FunT = Callable[ArgT, RetT]
def fn_combinator(*fn:FunT) -> FunT:
...
但是,解析器(至少在 Python 3.7 中)不喜欢 ArgT 排在第一位。 Callable[..., RetT] 是我能做的最好的吗?
【问题讨论】:
标签: python generics type-annotation