我想重载下面的函数,所以如果传递的值支持
int()
Python类型提示int
否则Python类型提示传递的值。
Python
typing
模块提供了 SupportsInt
类型,我们可以用它来检查我们的值是否支持 int。
from typing import Any, SupportsInt, overload
@overload
def to_int(value: SupportsInt) -> int: ...
@overload
def to_int[T: NotSupportsInt???](value: T) -> T: ...
def to_int(value: Any) -> Any:
try:
return int(value)
except TypeError:
return value
但是在我们的第二个
overload
语句中,我们如何指定所有不支持 int
的值?
你可以这样实现:
允许 SupportsInt 或任何其他类型的联合。
使用类型变量 T 和 Union 指定第二个重载可以接受任何类型。
在第二个重载中,我们指定返回类型可以是 int 或与输入值相同的类型。
这样,如果一个值支持int,它将被转换为int,否则,该值将按原样返回。
from typing import Any, SupportsInt, TypeVar, Union, overload
T = TypeVar('T')
@overload
def to_int(value: SupportsInt) -> int: ...
@overload
def to_int(value: T) -> T: ...
def to_int(value: Union[SupportsInt, T]) -> Union[int, T]:
try:
return int(value)
except TypeError:
return value