我有一个通用函数
one_of
,它可以返回它的任何(变量)参数。它的返回类型可能是其所有参数的超类型;但是,我想用其类型的 union 来注释其使用位置。
from typing import TypeVar
import random
T = TypeVar("T")
def one_of(*args: T) -> T:
return random.choice(args)
def int_or_str() -> int | str:
return one_of(1, "one")
这是 mypy 提供的错误:
vararg_type.py:11: error: Incompatible return value type (got "object", expected "Union[int, str]")
Found 1 error in 1 file (checked 1 source file)
我想我可以在每个调用站点上
cast
返回值one_of
,但是还有其他方法可以更好地使用类型检查器吗?
我不知道这是否“更好”,但 mypy 只使用
object
,因为它选择不默认为 int | str
。所以你可以告诉它使用 int | str
。只要暗示一个就足够了
def int_or_str() -> int | str:
one: int | str = "one"
return one_of(1, one)
可能有一种更简洁的写法。