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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐