我一直在使用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?
答案 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