• Python中的多态如何理解?(转)


    原文链接:https://blog.csdn.net/weixin_44695969/article/details/92175840

    Python中多态的作用
    让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

    Python中多态的特点
    1、只关心对象的实例方法是否同名,不关心对象所属的类型;
    2、对象所属的类之间,继承关系可有可无;
    3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
    4、多态是调用方法的技巧,不会影响到类的内部设计。

    多态的应用场景
    1. 对象所属的类之间没有继承关系
    调用同一个函数fly(), 传入不同的参数(对象),可以达成不同的功能

    class Duck(object): # 鸭子类
    def fly(self):
    print("鸭子沿着地面飞起来了")

    class Swan(object): # 天鹅类
    def fly(self):
    print("天鹅在空中翱翔")

    class Plane(object): # 飞机类
    def fly(self):
    print("飞机隆隆地起飞了")

    def fly(obj): # 实现飞的功能函数
    obj.fly()

    duck = Duck()
    fly(duck)

    swan = Swan()
    fly(swan)

    plane = Plane()
    fly(plane)

    ===运行结果:===================================================================================
    鸭子沿着地面飞起来了
    天鹅在空中翱翔
    飞机隆隆地起飞了

    2. 对象所属的类之间有继承关系(应用更广)

    class gradapa(object):
    def __init__(self,money):
    self.money = money
    def p(self):
    print("this is gradapa")

    class father(gradapa):
    def __init__(self,money,job):
    super().__init__(money)
    self.job = job
    def p(self):
    print("this is father,我重写了父类的方法")

    class mother(gradapa):
    def __init__(self, money, job):
    super().__init__(money)
    self.job = job

    def p(self):
    print("this is mother,我重写了父类的方法")
    return 100

    #定义一个函数,函数调用类中的p()方法
    def fc(obj):
    obj.p()
    gradapa1 = gradapa(3000)
    father1 = father(2000,"工人")
    mother1 = mother(1000,"老师")

    fc(gradapa1) #这里的多态性体现是向同一个函数,传递不同参数后,可以实现不同功能.
    fc(father1)
    print(fc(mother1))
    ===运行结果:===================================================================================
    this is gradapa
    this is father,我重写了父类的方法
    this is mother,我重写了父类的方法
    100

    ————————————————

    拓展:
    Java中多态性的表现: 多态性,可以理解为一个事物的多种形态。同样python中也支持多态,但是是有限的的支持多态性,主要是因为python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时python不支持重载。在python中 多态的使用不如Java中那么明显,所以python中刻意谈到多态的意义不是特别大。

    Java中多态的体现:
    ① 方法的重载(overload)和重写(overwrite)。
    ② 对象的多态性(将子类的对象赋给父类的引用)——可以直接应用在抽象类和接口上

    广义上:①方法的重载、重写 ②子类对象的多态性
    狭义上:子类对象的多态性(在Java中,子类的对象可以替代父类的对象使用)
    ————————————————
    版权声明:本文为CSDN博主「tigerlib」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_44695969/article/details/92175840

    人生苦短,我用python
  • 相关阅读:
    python学习笔记-4-列表和元组
    迭代器 生成器, 可迭代对象以及应用场景
    mysql的创创建用户阶段 开启客户端登录和授权阶段
    初识mysql数据库
    拆目录
    日志编码
    数据库mysql的安装.启动和基础配置------windows版本
    协程
    线程锁 死锁现象 递归锁 信号量 条件定时器 队列 线程池
    网络线程
  • 原文地址:https://www.cnblogs.com/niucunguo/p/12158512.html
Copyright © 2020-2023  润新知