Python 重写与重载

2021-11-21  本文已影响0人  崔某

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 自然就不需要函数重载了。

上一篇 下一篇

猜你喜欢

热点阅读