1、前言
学过Java的朋友都知道,Java有重写与重载的概念,那么Python语言有没有这种概念呢?首先来了解一下重写和重载的概念,然后验证一下。
2、重写(overwrite)
概念:方法重写又称方法覆盖,即子类不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写。
条件:
1、参数列表必须完全和被重写方法的参数列表一致(python无此限制,见示例代码)
2、返回类型必须完全和被重写方法的返回类型一致(python无此限制,见示例代码)
3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protect>private,python通过下划线控制访问权限)
Python 示例代码
class A(object):
def fun(self, v):
print(f"class_A:{v}")
return "aa"
class B(A):
# 重写A类的fun方法
def fun(self, **v):
print(f"class_B:{v}")
return 1
if __name__ == '__main__':
b = B()
print(b.fun(a="HELLO"))
# 打印结果:
# class_B:{'a': 'HELLO'}
# 1
3、重载(overload)
概念:仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,函数重载主要是为了解决两个问题:可变参数类型、可变参数个数。
条件:
1、一个类里面
2、方法名字相同
3、参数不同
情况 1 :
函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。
情况 2
函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。
结论:鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。