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()
    
  • 相关阅读:
    Lock和synchronized的区别和使用(转发)
    redis集群配置
    分布式之redis(转发)
    拉格朗日乘法与KKT条件
    骨骼动画原理
    常用非线性优化算法总结
    广义线性回归模型(三)
    线性模型、最优化方法(二)
    矩阵微分基础(一)
    OpenGL坐标系统
  • 原文地址:https://www.cnblogs.com/chenyoupan/p/12675980.html
Copyright © 2011-2022 走看看