使用 SupportsInt 而不是 SupportsInt 重载函数?

问题描述 投票:0回答:1

我想重载下面的函数,所以如果传递的值支持

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
的值?

python python-typing
1个回答
0
投票

你可以这样实现:

允许 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



© www.soinside.com 2019 - 2024. All rights reserved.