可变泛型类型别名

问题描述 投票:0回答:1

我正在编写一个与 mypy 一起使用的 python 类型存根。有很多函数采用

Callable[[*foo], Any]
形式的回调参数,其中
*foo
代表零个或多个类型。我希望能够使用泛型类型别名来减少重复。

通用类型别名记录在here,但我不明白如何将类型列表作为参数。

我知道这可以通过具体数量的参数来完成:

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。

python python-typing mypy
1个回答
0
投票

协议怎么样?


T = TypeVar("T")


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


def foo(f: MyAwesomeProtocol):
    ...


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

© www.soinside.com 2019 - 2024. All rights reserved.