• 多态与多态类


    一、多态

    多态是指:一类事物的多种形态,,(一个抽象类有多个子类,因而多态的概念依赖于继承)

    1.1 多态的特征

    1. 序列数据类型有多种形态:字符串,列表,元组

    2. 动物有多种形态:人,狗,猪

    3. 多态可以具有约束性(一般情况都有约束性,在其他语言中约束性很强)

      • 法1
      class Animal:
          def speak(self):
              pass
      
      class Pig(Animal):
          def speak(self):
              print("哼哼哼")
      class Dog(Animal):
          def speak(self):
              print("汪汪汪")
      class People(Animal):
          def speak(self):
              print("say hello")
      
      
      • 法2
      #用abc实现接口的统一化,约束代码(用的比较少)
      import abc
      #1 在父类括号内中写metaclass=abc.ABCMeta
      class Animal(metaclass=abc.ABCMeta):
          #2第二在要约束的方法上,写@abc.abstractmethod
      
          @abc.abstractmethod
          def speak(self):
              pass
      
      class Pig(Animal):
          # def aaa(self):
          #     print('哈哈哈')
          # 如果子类中没有speak方法,就会报错
          def speak(self):
              print('哼哼哼')
      pig = Pig()
      
      • 法三

        #用异常处理来实现
        class Animal():
            def speak(self):
                # 主动抛出异常
                raise Exception('必须要重写哦')
        class Pig(Animal):
            #如果没有会报错
            def speak(self):
                print('哼哼哼')
                
        pig = Pig()
        
      • 鸭子类:只要走路像鸭子(对象中有某个绑定方法),那你就是鸭子

        class Pig:
            def speak(self):
                print('哼哼哼')
        class People:
            def speak(self):
                print('哈哈哈')
        pig = Pig()
        people = People()
        def animal_speak(obj):
            obj.speak()
        animal_speak(pig)
        animal_speak(people)
        

    二、多态性

    多态性是指:具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

    1. 多态性:多种形态的不同体现
    2. 多态性依赖于:继承
    3. 多态性:定义统一的接口
    class Animal:
        def speak(self):
            pass
    
    class Pig(Animal):
        def speak(self):
            print("哼哼哼")
    class Dog(Animal):
        def speak(self):
            print("汪汪汪")
    class People(Animal):
        def speak(self):
            print("say hello")
    
    pig = Pig()
    dog = Dog()
    people = People()
    
    
    def animal_speak(obj):
        obj.speak()
    animal_speak(pig)
    animal_speak(dog)
    animal_speak(people)
    #
    
    哼哼哼
    汪汪汪
    say hello
    

    2.1 多态性的优点

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

    三 linux中的多态与多态性

    • 传统的写法
    class File:
        def read(self):
            pass
        def write(self):
            pass
    #内存类
    class Memory(File):
        def read(self):
            print("Memory....read")
        def write(self):
            print('Memory.....write')
    
    • 鸭子类型的写法

      class Memory:
          def read(self):
              print("Memory....read")
          def write(self):
              print('Memory.....write')
      
      class Network:
          def read(self):
              print("Memory....read")
          def write(self):
              print('Memory.....write')
      

    四、小结

    多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度)
    多态性:一种调用方式,不同的执行效果(多态性)

  • 相关阅读:
    UE4自学随笔(一)
    经纬度转换度分秒
    IE模式下EasyUI Combobox无效问题
    LayUI加载js无效问题
    C# 使用GDI绘制雷达图
    SQLPrompt8.2 安装之后找不到激活入口
    NetCore3.0 文件上传与大文件上传的限制
    NetCore 下使用 DataTable 以及可视化工具
    docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成
    QQ浏览器兼容模式下Cookie失效 导致的NetCore Cookie认证失效
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11425933.html
Copyright © 2020-2023  润新知