zoukankan      html  css  js  c++  java
  • 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

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







  • 相关阅读:
    带字数限制提示的输入框效果
    js快速获取数组中的最大值最小值
    js实现连线题
    js自定义图片提示效果
    为了遇见你
    为了明天(励志篇)
    你为什么总是不理我
    爱情,是我一生中最虔诚的信仰
    你是我心中永远抹不掉的痛
    爱你一万次够不够
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/12320477.html
Copyright © 2011-2022 走看看