多态与多态性浅析

最近学到了Python的面向对象部分,见到了一个新词——多态性,翻了一下以前自己记的东西才发现这不是Python独有的,以前学的还真是有不少遗漏啊…
##多态

  • 多态多态指的是一类事物有多种形态,(多态的概念是依赖于继承的)

简单的多态实例——动物的多态

        class Animal:
            def run(self):
                raise AttributeError('子类必须实现这个方法')
         class People(Animal):
            def run(self):
                print('人正在跑')
        class Pig(Animal):
            def run(self):
                print('pig is running')
        class Dog(Animal):
            def run(self):
                print('dog is running')

        peo1=People()
        pig1=Pig()
        d1=Dog()

        peo1.run()
        pig1.run()
        d1.run()

运行结果:
人正在跑
pig is running
dog is running

得到预想中的结果,了在动物的class中定义了run的抽象方法,由People、Pig和Dog三个类继承并实现了各自的run方法。同样的run方法,不同的对象调用得到不同的效果。

##多态性

  • 多态性是指具有不同功能的函数可以使用相同的函数名,这样即可以以相同的函数名调用不同功能的函数。

  • 面向对象方法中对多态性的表述:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。

  • 所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

          def func(obj):
              obj.run()
    
          func(peo1)
          func(pig1)
          func(d1)
    
          def func(obj): #obj这个参数没有类型限制,可以传入不同类型的值
              obj.run() #调用的逻辑都一样,执行的结果却不一样
    
          func(peo1)
          func(pig1)
    
          func(d1)
    
  • 多态性依赖于:继承,定义统一的接口

##多态性的优势

  • 增加了程序的灵活性
      以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
  • 增加了程序额可扩展性
      通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

本文章转载自https://www.cnblogs.com/luchuangao/p/6739557.html

猜你喜欢

转载自blog.csdn.net/pikachu_12138/article/details/86499933