• 20、面向对象(多态)



    20.1、多态介绍:

    1、什么是多态:

    多态指的是一类事物的多种形态,比如动物有多种形态:人、狗、猪;

    在python中接口可以比作是一类事物、继承接口的子类可以比作为多种形态(不同子类下具有相同的方法);

    实现方式(接口+继承):多态和继承一起使用,继承常使用接口(特殊的抽象类)的方式实现;


    2、多态的动态性:

    (1)在一个函数中传入不同类的对象,在该函数内不同类的对象去调用自己类下相同的方法;

    (2)比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,

    但是执行的效果不同。

    (3)使用多态的动态性的好处:

    1)增加了程序的灵活性:

    以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj)

    2)增加了程序可扩展性:

    通过继承类创建了一个新的类,使用者无需更改自己的代码,还是用func(obj)去调用

    (4)其实大家一直在享受着多态性带来的好处,比如 Python 的序列类型有多种形态:字符串,列表,元组,多态性体现如下:

    # str,list,tuple都是序列类型

    s=str('hello')

    l=list([1,2,3])

    t=tuple((4,5,6))


    # 我们可以在不考虑三者类型的前提下使用s,l,t

    s.__len__()

    l.__len__()

    t.__len__()


    len(s)

    len(l)

    len(t)


    20.2、示例:

    import abc

    class Animal(metaclass=abc.ABCMeta):

    @abc.abstractmethod

    def talk(self):

    pass

    # 同一类事物:动物(接口,特殊的抽象类)


    class People(Animal):

    def talk(self):

    print('say hello')

    # 动物的形态之一:人


    class Dog(Animal):

    def talk(self):

    print('say wangwang')

    # 动物的形态之二:狗


    class Pig(Animal):

    def talk(self):

    print('say aoao')

    # 动物的形态之三:猪


    peo=People()

    dog=Dog()

    pig=Pig()


    peo.talk()

    dog.talk()

    pig.talk()

    # peo、dog、pig 都是动物,只要是动物肯定有talk方法

    # 于是我们可以不用考虑它们三者的具体是什么类型,而直接使用

    # say hello

    # say wangwang

    # say aoao



    def func(obj):

    obj.talk()


    func(peo)

    func(dog)

    func(pig)

    # say hello

    # say wangwang

    # say aoao

    # 更进一步,我们可以定义一个统一的接口来使用,实现动态的多态性;







  • 相关阅读:
    ElasticSearch7.6学习使用及问题总结
    phpstorm2020.1破解及使用
    大规模网站开发技术
    备份数据库、恢复数据库、定时
    Centos7系统tmp目录下文件默认保留时长
    linux删除指定文件夹中某个文件除外的其他文件
    python resource模块使用
    python logging 日志轮转文件不删除问题的解决方法
    linux 常用命令快捷键
    shell学习笔记(4)
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/12320477.html
Copyright © 2020-2023  润新知