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

    1.什么是多态:同一事物有多种形态

    # class Animal:
    #     pass
    #
    # class People(Animal):
    #     pass
    #
    # class Dog(Animal):
    #     pass
    #
    # class Pig(Animal):
    #     pass
    

    2.为何要有多态=》多态会带来什么样的特性,多态性

    #    多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象
    class Animal: # 统一所有子类的方法
        def say(self):
            print('动物基本的发声频率。。。',end=' ')
    
    class People(Animal):
        def say(self):
            super().say()
            print('嘤嘤嘤嘤嘤嘤嘤')
    
    class Dog(Animal):
        def say(self):
            super().say()
            print('汪汪汪')
    
    class Pig(Animal):
        def say(self):
            super().say()
            print('哼哼哼')
    obj1=People()
    obj2=Dog()
    obj3=Pig()
    
    
    obj1.say()
    obj2.say()
    obj3.say()    
    动物基本的发声频率。。。 嘤嘤嘤嘤嘤嘤嘤
    动物基本的发声频率。。。 汪汪汪
    动物基本的发声频率。。。 哼哼哼
    
    
    
    # 定义统一的接口,接收传入的动物对象
    def animal_say(animal):
        animal.say()
    
    animal_say(obj1)
    animal_say(obj2)
    animal_say(obj3)
    
    

    3.鸭子类型

    • 完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象
    • Python崇尚的“鸭子类型”
    # class Cpu:
    #     def read(self):
    #         print('cpu read')
    #
    #     def write(self):
    #         print('cpu write')
    #
    # class Mem:
    #     def read(self):
    #         print('mem read')
    #
    #     def write(self):
    #         print('mem write')
    #
    #
    # class Txt:
    #     def read(self):
    #         print('txt read')
    #
    #     def write(self):
    #         print('txt write')
    
    # 了解:
    import abc
    
    class Animal(metaclass=abc.ABCMeta): # 统一所有子类的标准
        @abc.abstractmethod
        def say(self):
            pass
    
    # obj=Animal() # 不能实例化抽象类自己
    
    class People(Animal):
        def say(self):
            pass
    
    class Dog(Animal):
        def say(self):
            pass
    
    class Pig(Animal):
        def say(self):
            pass
    
    #
    obj1=People()
    obj2=Dog()
    obj3=Pig()
    
  • 相关阅读:
    MeasureSpec学习
    android之GridView实现九宫格布局
    android 检查网络是否可用,如果不可用弹出设置,让用户改变
    Android Studio中新建项目时Your android sdk is out of date or is missing templates的解决办法
    android studio 改变主题及字体大小
    使用URL读取网络图片资源
    Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
    android获取在res文件下的图片资源
    星座物语APP
    第十三次会议
  • 原文地址:https://www.cnblogs.com/chenyoupan/p/12675980.html
Copyright © 2011-2022 走看看