• python面向对象继承开发时遇到情况——方法的重写(覆盖、扩展)


    欢迎关注博主 python老鸟 或 前往 『Python自学网』, 从基础入门免费课程开始,逐步深入学习python全栈体系课程,适合新手入门到精通全栈开发。


    免费专栏传送门:《Python基础教程

    使用面向对象继承开发时经常会遇到的一种情况,重写。

    继承:

    子类拥有父类的所有属性和方法。

    子类继承自父类,乐意直接享受父类中已经封装好的方法,不需要再次开发。

    应用场景

    当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)

    虽然Dog类中有叫唤的方法,假如因为哮天犬是神犬和普通狗狗叫唤方式不一样,所以Dog类中的bark方法满足不了,这时就要对这个bark方法重写了。

    重写父类方法有2种情况:

    1. 覆盖父类的方法
    2. 对父类方法进行扩展

    一、覆盖父类的方法

    如果在开发中,父类的方法实现和子类的方法实现完全不同,就可以使用覆盖的方式,在子类中重新编写父类的方法实现。

    具体的实现方式:

    就相当于在子类中定义了一个和父类同名的方法并且实现,重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法。

    代码体验:

    1. class Animal():
    2. def eat(self):
    3. print("吃")
    4. def run(self):
    5. print("跑")
    6. def drink(self):
    7. print("喝")
    8. def sleep(self):
    9. print("睡")
    10. class Dog(Animal):
    11. def bark(self):
    12. print("汪汪叫")
    13. class XiaoTianQuan(Dog):
    14. def fly(self):
    15. print("老子会飞,哈哈哈哈")
    16. def bark(self):
    17. print("天籁之音")
    18. # 创建一个哮天犬对象
    19. xtq = XiaoTianQuan()
    20. # 如果子类中重写了父类方法
    21. # 在使用子类对象调用方法时,会调用子类中重写的方法
    22. xtq.bark()

    执行结果:

    注意:如果在XiaoTianQuan类中没有重新编写bark方法,那么执行结果是汪汪叫,因为此时调用的依旧是父类中的bark方法。

    二、对父类方法进行扩展

    如果在开发中,子类的方法实现中包含父类的方法实现,父类原本封装的方法实现是子类方法的一部分,就可以使用扩展的方式。

    1.扩展的方式步骤:

    1. 在子类中重写父类的方法
    2. 在需要的位置使用 super().父类方法 来调用父类方法的执行
    3. 代码其他的位置针对子类的需求,编写子类特有的代码实现

    2.关于super

    1. 在python中super是一个特殊的类
    2. super()就是使用super类创建出来的对象
    3. 最常使用的场景就是,在重写父类方法时,让super().调用在父类中封装的方法实现

    代码体验:

    功能需求:不仅要会汪汪叫,还要会天籁之音。

    1. class Animal():
    2. def eat(self):
    3. print("吃")
    4. def run(self):
    5. print("跑")
    6. def drink(self):
    7. print("喝")
    8. def sleep(self):
    9. print("睡")
    10. class Dog(Animal):
    11. def bark(self):
    12. print("汪汪叫")
    13. class XiaoTianQuan(Dog):
    14. def fly(self):
    15. print("老子会飞,哈哈哈哈")
    16. def bark(self):
    17. # 1. 针对子类特有的需求,编写代码
    18. print("天籁之音")
    19. # 2. 使用super(). 调用原本在父类中封装的方法
    20. super().bark()
    21. # 3. 增加其他子类的代码
    22. print("OK啦OK啦OK啦OK啦")
    23. # 创建一个哮天犬对象
    24. xtq = XiaoTianQuan()
    25. xtq.bark()

    执行结果:

    3.调用父类方法的另外一种方式(知道)

    在python2.0时,如果需要调用父类的方法,还可以使用以下方式:

    父类名.方法(self)

    这种方式目前在python3.x还支持这种方式

    这种方法不推荐使用,因为一旦父类发生过变化,方法调用位置的类名同样需要修改

    提示:

    1. 在开发时,父类名 和 super( ) 两种方法不要混用
    2. 如果使用当前子类名 调用方法,会形成递归调用,出现死循环

    代码体验:修改部分+注意部分

  • 相关阅读:
    linux下python3环境中安装MySQLdb
    简单入门linux【三】linux 组和权限
    SpringBoot SSE服务端主动推送事件详解
    HTML代码中引入CSS样式的三种方式
    celery笔记六之worker介绍
    HTML网页设计制作大作业 基于HTML+CSS+JavaScript实现炫丽口红网化妆品网站(10页)
    【LeetCode】658. 找到 K 个最接近的元素
    再谈Android消息分发
    【无标题】
    刨析 代码中常用的 基础 String 对象类(源码解析)
  • 原文地址:https://blog.csdn.net/weixin_48728769/article/details/126749279