python是没有重载概念的,同名的函数,最后一次的定义会覆盖原有的定义。但是通过python强大的魔法函数,实现出与C++类似的重载效果。
1、参数个数不同的情况
这种情况下的重载, 如果直接按照C++的形式编写,是不会生效的,结果会是最后一个三参数的实现覆盖了前两个实现。
def fun(a):
print("one param")
def fun(a, b):
print("two param)
def fun(a, b, c):
print("three param)
if __name__ == "__main__":
fun(1)
fun(1, 2)
fun(1, 2, 3)
结果如下:
Traceback (most recent call last):
File "c:\Users\F1V7SM5\Documents\My\demo\fluent.py", line 93, in <module>
fun(1)
TypeError: fun() missing 2 required positional arguments: 'b' and 'c'
但是我们知道,Python 函数的形参十分灵活,我们可以只定义一个函数来实现相同的功能,就像这样
def fun(*args):
if len(args) == 1:
print("one param")
elif len(args) == 2:
print("two param")
elif len(args) == 3:
print("three param")
2、参数类型不同的情况
from functools import singledispatch
@singledispatch
def fun(a):
print(a)
@fun.register(int)
def _(a):
print("Int type: {}".format(a))
@fun.register(str)
def _(a):
print("str type: {}".format(a))
class tmp:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
@fun.register(tmp)
def _(a):
print("tmp type: x = {}, y = {}".format(a.x, a.y))
if __name__ == "__main__":
a = tmp(10, 3)
fun(10)
fun("hahah")
fun(a)
可以得到如下的结果
Int type: 10
str type: hahah
tmp type: x = 10, y = 3
3、参数类型与个数都不一样的情况
这种暂时还没有找到方式去实现
标签:__,python,print,param,fun,重载,type,def From: https://www.cnblogs.com/chenxyy/p/17652285.html