我可以使用输入模块在python中为类型构造函数创建类型别名吗?

Sam*_*yer 10 python

从python版本3.5开始,您可以使用类型提示来指示函数期望的参数类型.我发现这些类型提示对于文档目的非常有价值,所以我尝试尽可能多地使用它们.它们还有助于linter,因此可以定期使我免受代码更改引入的错误的影响.

例如,在我的代码中,我有一些函数将零参数函数作为参数.例如:

def onReady(f: Callable[[], Any]) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)

要么

def checkIfReady(f: Callable[[], Bool]) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)

我想做的是创建一个类似的别名(下面的代码是无效的python):

Action[A] = Callable[[], A]
Run Code Online (Sandbox Code Playgroud)

然后我可以缩短上面参数的类型:

def onReady(f: Action[Any]) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)

我知道我可以为特定实例创建一个类型别名,例如:

ActionBool = Callable[[], bool]
Run Code Online (Sandbox Code Playgroud)

我知道是否存在等的NewTypetyping的模块,但这些都不似乎推广到更高阶的类型.

Twi*_*Sim 8

我想我已经找到了最简单的解决方案。根据PEP 484,这是有效的:

T = TypeVar('T') #  or TypeVar('T', int, float, bool, str)
Action = Callable[[], T]
def onReady(f: Action[Any]) -> None:
    pass
Run Code Online (Sandbox Code Playgroud)