可以指定所有位置args都是一个或其他参数类型?

时间:2018-02-05 22:35:57

标签: python typing mypy

我一直在使用typing模块中的废话,因为我发现它让我们回过头来阅读并理解我的代码大约3倍。它也使pycharm有用两倍。

我知道要指定单个OR位置参数的类型,可以这样做:

def f(*args: int = 0) -> None:
    #  integers are expected for args
    pass

此外,如果位置参数可以是多种类型,您可以使用Union来处理这种情况:

from typing import Union

def f(*args: Union[str, int]) -> None:
    #  integers OR strings are expected for args
    pass

我的问题是:有没有办法告诉类型检查器确保args是全部int s,或所有str s,但不是两者的混合,但不限于仅int或仅str s?

1 个答案:

答案 0 :(得分:2)

我很确定你想使用TypeVar

T = typing.TypeVar('T', int, str) # can be either int or str, but not both in a single call

def f(*args: T) -> None:
    pass