• 多态与鸭子类型


    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()
    
  • 相关阅读:
    Numpy用于数组的文件输入输出
    numpy利用数组进行数据处理
    numpy的通用函数:快速的元素级数组函数
    NumPy基础知识:数组和矢量计算
    数据处理任务介绍
    Django的ModelForm
    Http1.0和Http1.1的主要区别
    静态库中如何包含资源文件
    zt 正则
    oc调用swift的打包.a / framework 不成功?!
  • 原文地址:https://www.cnblogs.com/chenyoupan/p/12675980.html
Copyright © 2020-2023  润新知