zoukankan      html  css  js  c++  java
  • python3(二十四) subClas

    """ 继承的多态 """
    __author__ = 'shaozhiqi'
    
    
    # -----------------父类------------------------
    class Animal(object):
        def run(self):
            print('Animal is running...')
    
    
    # -----------------子类------------------------
    class Dog(Animal):
        pass
    
    
    # ------------------子类----------------------------------------
    class Cat(Animal):
        pass
    
    
    # -------------------子类实例-------------------------------------
    dog = Dog()
    dog.run()  # Animal is running...
    
    cat = Cat()
    cat.run()  # Animal is running...
    
    
    # --------------------重新定义dog 有自己的run方法-------------------
    class Dog(Animal):
    
        def run(self):
            print('Dog is running...')
    
        def eat(self):
            print('Dog eating meat...')
    
    
    dog = Dog()
    dog.run()  # Dog is running...
    dog.eat()  # Dog eating meat...
    # 当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。
    # 这样,我们就获得了继承的另一个好处:多态。
    # 子类,那它的数据类型也可以被看做是父类。但是,反过来就不行:
    print(isinstance(dog, Dog))  # True
    print(isinstance(dog, Animal))  # True
    a = Animal()
    print(isinstance(a, Dog))  # False
    
    
    # -----------------------------适配----------------------------------
    def run_selfrun(animal):
        animal.run()
    
    
    run_selfrun(a)  # Animal is running...
    run_selfrun(dog)  # Dog is running...
    # 新增一个Animal的子类,run_selfrun()不需要对做任何修改,这种方法在业务中就可以向上提取,
    # 实际上,任何依赖Animal作为参数的函数或者方法都可以不加修改地正常运行,原因就在于多态。
    
    # 开闭原则:
    # 对扩展开放:允许新增Animal子类;
    # 对修改封闭:不需要修改依赖Animal类型的run_selfrun()等函数。
  • 相关阅读:
    Android | 教你如何开发一键银行卡绑定功能
    Android | 教你如何开发一个拍照翻译小程序
    Android | 教你如何开发一个证件照DIY小程序
    Android | 教你如何用三十分钟在安卓上开发一个微笑抓拍神器
    设计之禅——备忘录模式
    设计之禅——中介者模式
    设计之禅——解释器模式(译文)
    设计之禅——享元模式
    设计之禅——责任链模式
    设计之禅——桥接模式
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/11550436.html
Copyright © 2011-2022 走看看