【发布时间】:2016-09-28 13:23:15
【问题描述】:
有一个适用于 Python 3.5+ 的 overloading 包。 有了这个包,可以重新定义方法,但是有不同的类型提示,它的装饰器会找出应该调用哪个重载方法。
常见编码模式:
class foo:
def func(param):
if instance(param, int):
pass
elif instance(param, str):
pass
elif instance(param, list):
pass
else:
raise ValueError()
使用@overload:
class foo:
@overload
def func(param: int):
pass
@overload
def func(param: str):
pass
@overload
def func(param: list):
pass
这里是documentation。
我的问题是:
- 与旧式参数类型切换相比,性能影响有多大?
- 这个包如何访问类型提示?
【问题讨论】:
-
通用编码模式 -- 不,不是,抱歉。大多数 Python 代码不需要使用
isinstance()。 -
请注意,该包并非特定于 Python 3.5。 Python 3.5 仅标准化类型提示,但从 Python 3.0 开始提供注释。您链接到的软件包支持 3.3 及更高版本;您的示例根本不使用
typing模块。 -
source code 应该让您回答第二个问题(它读取函数注释,正如预期的那样)。看着
dispatcher(),我首先会选择“较慢”。 -
哦,我不知道 3.5 之前支持的类型提示。
-
类型提示只是注释。在
typing模块被添加到 3.5 之前,没有关于如何使用注释进行类型提示的标准。该示例使用内置类型(int、str、list),因此不需要typing,而且我认为该库不支持泛型(我怀疑它可以区分@987654334 @ 和Sequence[int])。
标签: python python-3.5 overloading