Python不像C++、Java等语言可以进行函数的重载。Python是不可以进行函数重载的。下面的例子,虽然我们定义了三个test函数,但是在局部命名空间下,只有一个test函数,就是最有一个,也就是说最后一个test覆盖了前两个test。
def test():print("test")def test(arg):print(arg)def test(arg1, arg2):print(arg1, arg2)test() # 报错
test(1) # 报错
test(1,2) # 正常运行
在类的内部也是这样,不允许方法重载
class Test:def test(self):print("test")def test(self, arg1):print(arg1)t = Test()
t.test() # 报错
t.test(1) # 正常运行
overload装饰器:
官方文档中的介绍是这样的:
也就是说,和typing这module里面其他东西的功能一样,@overload装饰器其实只是一种注解/提示:该函数允许传入不同的参数类型组合。最终,所有加了@overload装饰器的方法都会被一个不加装饰器的方法覆盖掉。
参考:https://zhuanlan.zhihu.com/p/489767633