zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    美团面试,360面试 ,滴滴面试,阿里面试,百度面试,京东面试,搜狗面试:
    Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)
    maven snapshot和release版本的区别
    Maven 生命周期 和插件
    Maven pom 文件解释
    Zookeeper原理架构
    sublime 支持PHP语法提示
    Zen Coding 用法
    让浏览器屏蔽js
    淘宝设计师入门:设计师SDK环境配置
  • 原文地址:https://www.cnblogs.com/niucunguo/p/12158512.html
Copyright © 2011-2022 走看看