我正在尝试改进一个组合两个相同类型值的函数,目前支持 int 和 str。这是我当前的实现:
def combine[T: (int, str)](a: T, b: T) -> T:
match a:
case int():
return a + b
case str():
return a + b
这通过了 mypy 类型检查。但是,我想让它更具可扩展性,以便将来添加其他类型。我想使用类型别名 possibleTypeForCombine 来表示允许的类型。我尝试将其定义为:
possibleTypeForCombine = int | str
# or
from typing import Union
possibleTypeForCombine = Union[int, str]
我的目标是将来能够轻松地向 possibleTypeForCombine 添加新类型,并让 mypy 通知我需要在使用此类型的函数中添加新案例。 我尝试在新版本的函数中使用此类型别名:
def combine2[T: possibleTypeForCombine](a: T, b: T) -> T:
match a:
case int():
c = a + b
return c
case str():
c = a + b
return c
但是,这会导致以下 mypy 错误:
错误:缺少返回语句 [return] 错误:不支持的操作数 +(“str”和“T”)[运算符]的类型错误:返回不兼容 值类型(得到“str”,期望“T”)[返回值]
我当然预料到了。约束泛型类型的语法是 T: (可能类型 1, 可能类型 2)。
我想知道是否可以制作类似的东西
这在这里有描述。您应该将类型包装在
type[...]
: 中
possibleTypeForCombine = type[int | str]
def combine2[T: possibleTypeForCombine](a: T, b: T) -> T:
match a:
case int():
c = a + b
return c
case str():
c = a + b
return c