python类型:重载vs TypeVar

2024-10-02 18:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我问自己,对于返回与输入相同类型的函数,在python中使用TypeVaroverload是否有最佳实践。考虑这些例子。

例1。使用TypeVar

from typing import TypeVar

StrOrInt = TypeVar("StrOrInt", str, int)

def return_same_type_typevar(x: StrOrInt) -> StrOrInt:
    if isinstance(x, str):
        # process str
        return x
    else:
        # process int
       return x

示例2,使用overload

from typing import overload

@overload
def return_same_type_overload(x: str) -> str:
    ...

@overload
def return_same_type_overload(x: int) -> int:
    ...

def return_same_type_overload(x):
    if isinstance(x, str):
        # process str
        return x
    else:
        # process int
       return x

这两个例子真的达到了同样的效果吗?这里是否讨论了overload的这种用法,并且overload应该仅在返回类型与输入类型不同时使用?还是很好,但过于冗长

当然,这只是一个微不足道的例子。我正在查看的代码可能更多地采用pandasSeriesDataFrame作为输入,而不是strint


编辑:更新的示例显示intstr有不同的代码路径


Tags: fromimporttyping类型returndeftypeprocess
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:44

没有一般的“最佳实践”,但在适用的情况下TypeVar在任何情况下都是优越的

  • 使用TypeVar比较短。每个附加类型都是一个附加参数,而重载则是2-3行

  • 使用TypeVar更清晰。它立即表示,所有变体的工作原理基本相同,而overload可能有额外的参数

  • 使用TypeVar更能提供信息。运行时函数保留其注释以供内省,而overload注释被丢弃

倾向于将overload限制在其特征显著不同的情况下,即在特定变体中具有额外或受限参数

相关问题 更多 >