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

时间:2018-04-17 21:01:50

标签: python

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

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

def onReady(f: Callable[[], Any]) -> None:
    ...

或者

def checkIfReady(f: Callable[[], Bool]) -> None:
    ...

我想做的是制作类似的别名(下面的代码不是有效的python):

Action[A] = Callable[[], A]

然后我可以缩短上面论点的类型:

def onReady(f: Action[Any]) -> None:
    ...

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

ActionBool = Callable[[], bool]

我知道NewType模块中typing的存在,但这些似乎都没有推广到更高阶的类型。

1 个答案:

答案 0 :(得分:2)

我想我找到了最简单的解决方案。根据{{​​3}},这是有效的:

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