• Python中的多态如何理解?(转帖,让我很理解。)【外加自我看法】(这次修改后应该就是标准答案了)


    置顶写一些我自己的看法,根据Python基础教程的写法:多态指的是能够同样的对待不同的类型和类的对象,既无需知道对象属于哪个类就可以调用的方法。

    好比.clear的方法,你给一个列表与字典都能调用该方法。

    向.count可以给字符串,列表,元祖,都能用,这个方法就是多态的,

    你没发现,同一个函数用了可以针对不同的类型进行操作。比价疑惑的是,无需知道对象是哪个类那句话,其实这些方法我们是知道哪个类的,

    不知哪个类,还真不敢乱用,我觉的字面上的无需知道哪个类的意思,可能这些方法在自己的操作类型范围内,不需要知道是哪个类的意思。

    比如前面.count你不需要知道是列表,元祖还是字符串,来了就上方法就好了,不需要isinstance或type判断,会让程序看过去更加简单,清爽

    以上是我的理解。

    今天又重新看了书,有了更加深刻的理解,多态其实还是因为有继承的关系,我们所有的实例的类的祖宗类都是object,下面的任何实例对象的类都是它子孙后代。

    其实很多文献翻译中,翻译的不好,一直就说不用取关心对象的具体类型,上去就能使用具体方法或者函数(调用的最后还是魔法方法)。

    正常的情况应该是在限定的集中范围内,你使用某一个方法或者函数(调用的最后还是魔法方法),不用考虑它的具体类型。

    好比前面写的.count在字符串与列表,元祖之间使用,你根本不用考虑使用之前它是什么类型的元素。

    这个时候书中就说了一个大招。repr,repr最后调用的应该是__repr__函数,但它使用中,基本可以说完全不考虑来的对象是什么,只要是python里面合法的对象。

    上来就给你套一个双引号。

    这才是正真的多态含义,多态最后面说的是方法,很多国内的书写的乱七八糟,还自创了什么多态性,我操,这还出书误人子弟。

    看来很多东西还是要慢慢体会,关于多态,我查了很多国内的资料,基本都是乱说,国外的英文看不懂。

    但我感觉我的这次理解100%正确,这是结合我一年的学习外加图灵《Python基础教程》书中解释。(这书还可以,新手不推荐,有一定基础再看,收益匪浅)


    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)

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

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28

    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

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37

     
    ————————————————
    版权声明:本文为CSDN博主「tigerlib」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_44695969/article/details/92175840

  • 相关阅读:
    Kudu vs HBase
    数据分析怎么更直观?十分钟构建数据看板
    The Beam Model:Stream & Tables翻译(上)
    3分钟掌握一个有数小技能:收入贡献分析
    猛犸机器学习开发实践
    SparkSQL大数据实战:揭开Join的神秘面纱
    细说Mammut大数据系统测试环境Docker迁移之路
    python中的闭包与装饰器
    import详解
    python中的with与上下文管理器
  • 原文地址:https://www.cnblogs.com/sidianok/p/11784947.html
Copyright © 2020-2023  润新知