zoukankan      html  css  js  c++  java
  • 多态与多态类

    一、多态

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

    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')
      

    四、小结

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

  • 相关阅读:
    swift对比object-c
    Swift : missing argument label 'xxx' in call
    Swift: missing argument label 'xxx' in call
    Swift 闭包(六)
    求教贴,一个可能很白痴的问题,有时间又很闲的大神给解决下
    Swift “ambiguous use of operator '>'”
    swift 之嵌套的理解 func chooseStepFunction(backwards: Bool) -> (Int) -> Int
    苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
    苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
    触摸板PCB制作-TM12
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11425933.html
Copyright © 2011-2022 走看看