• Python面向对象14.重写


    一、引入

    我们知道一个子类如果继承了父类,那么当通过子类对象去调用一个方法时,如果子类对象中没有此方法,那么就会到继承的父类中查询,如果查询到有则进行调用

    但是

    有时,我们发现子类继承的父类的方法不能100%满足子类对象的需求,则此时就需要在子类中定义一个与父类相同的名字的方法,此时子类对象调用这个方法时即使父类中有,但依然不会调用,而是调用子类中的方法

    二、什么是重写

    我们把子类中定义了与父类中相同名字的方法,叫做重写(大白话就是:子类的方法覆盖了父类中的同名方法)

    三、示例

    class Father(object):
        def play_game(self):
            print("父类中的play_game")
    
        def drink(self):
            print("父类中的drink方法")
    
    
    class Son(Father):
        def play_game(self):
            print("子类中的play_game")
    
    
    father = Father()
    father.play_game()  # 调用父类中的方法,因为对象是父类创建的
    
    son = Son()
    son.play_game()  # 调用子类中的方法,因为在子类中重写了play_game方法
    son.drink()  # 调用父类中的方法,因为子类中并没有重写此方法
    

      

     

    运行效果

    父类中的play_game
    子类中的play_game
    父类中的drink方法
    

      

     

    四、总结

    如果父类中的方法在子类继承时发现并不符合子类的需求,此时我们在子类中重写这个方法即可

    切记:不要直接在父类中修改此方法,如果将父类中的方法改成你子类的功能,虽然子类创建的对象可以100%满足要求,但你并不能保证其它继承这个父类的子类也需要同样的功能,所以在以后的开发工作中,一个父类定义好了之后,就不要轻易的修改,否则继承它的子类都要进行修改,这个工作量是非常大的,请不要这么做

  • 相关阅读:
    NYOJ 23 取石子(一)
    XYNUOJ 2026 素数环
    XYNUOJ 1756 魔法工会
    XYNUOJ 1784 胜利大逃亡
    NYOJ 18 The Triangle
    NYOJ 737 合并石子
    XYNUOJ 问题 B: 敌兵布阵
    NYOJ 1063 生活的烦恼
    XYNUOJ 1774 最少拦截系统
    XYNUOJ 1248 排队打水问题
  • 原文地址:https://www.cnblogs.com/dong4716138/p/15751652.html
Copyright © 2020-2023  润新知