测开之面向对象进阶篇・《多态》

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测开之面向对象进阶篇・《多态》相关的知识,希望对你有一定的参考价值。

面向对象三大特征

面向对象编辑的三大特征:封装、继承、多态。

  • 封装:客观的失误封装成类(将数据和方法放在一个类中构成了封装)。
  • 继承:python中一个类可以继承于一个类,也可以继承多个类,被继承的类叫做父类,继承的叫做之类。
  • 多态:指的是一类食物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的之类对象调用相同的方法,产生不同的执行过程,多态可以增加代码的灵活度。

多态

  1. 定义一个父类,继承某个方法
  2. 定义多个子类,在子类中重新父类方法,每个之类实现不同的功能
  3. 假设我们定义了一个函数,需要一个父类类型的对象参数,那么调用函数的时候,传入父类不用的之类类型对象,那么这个函数会执行不同的功能,这就是多态的体现。

可能上面的描述会有些抽象,下面我们编写代码,来方便大家更好的理解多态:

class Animal(object):
    """动物类"""

    def func(self):
        print('动物发出了声音')


class Cat(Animal):
    """猫类"""

    def func(self):
        print('喵 喵 喵')


class Dog(Animal):
    """狗类"""

    def func(self):
        print('汪 汪 汪 ')


class Hero:
    def func(self):
        print('这个是英雄类的方法,不是动物类的对象')


def work01(musen: Animal):
    musen.func()

上方代码中,我们定义了一个动物父类,然后通过多个动物子类去继承父类,每个动物的叫声都不一样,这里我们是继承父类,然后实现不同的功能。

假设我们只封装了一个父类,然后将所有的动物叫声都封装到父类里面,那么随着后期代码越来越复杂,会变得不易维护且耦合性强。因此我们可以使用多态的概念,从而增加代码的灵活度。

注意点:python中函数的参数是没有类型限制的,所有多态在python中的体现并不是很严谨。多态的概念是应用与JAVA和C#这一类强语言中,而Python崇尚“鸭子类型”

鸭子类型

  • 鸭子类型的概念:他并不要求严格的继承体系,关注的不是对象的类型,而是它是否具有要调用的方法。
  • 鸭子类型在python中的概念:
    内置函数iter:参数可以是实现迭代协议__iter__方法的任何对象的类型。

以上是关于测开之面向对象进阶篇・《多态》的主要内容,如果未能解决你的问题,请参考以下文章

测开之面向对象进阶篇・《属性自省》

测开之数据类型进阶篇・第三篇《推导式》

测开之数据类型进阶篇・第四篇《生成器和迭代器》

测开之函数进阶篇・第七篇《装饰器》

测开之函数进阶篇・第六篇《闭包》

测开之数据类型进阶篇・第二篇《字典和集合的原理应用》