可变泛型类型别名



我正在编写一个用于mypy的python类型存根。有很多函数采用形式为Callable[[*foo], Any]的回调参数,其中*foo表示零个或多个类型。我希望能够使用泛型类型别名来减少重复。

这里记录了泛型类型别名,但我不知道如何将类型列表作为参数。

我知道这可以通过一系列具体的论点来实现:

T = TypeVar('T')
Callback0 = Callable[[], Any]
Callback1 = Callable[[T], Any]
def foo(f: Callback0): ...
def bar(f: Callback1[str]): ...

我想申报的是:

def foo(f: Callback[]): ...
def bar(f: Callback[str]): ...

如果重要的话,代码是针对Python 3.3的,我正在使用Python 3.7运行mypy。

协议怎么样?


T = TypeVar("T")

class MyAwesomeProtocol(Protocol[T]):
def __call__(self, a: T) -> Any:
pass

def foo(f: MyAwesomeProtocol):
...

def bar(f: MyAwesomeProtocol[str]):
...

最新更新