继承的详解

https://www.cnblogs.com/poloyy/p/15216652.html

方法的重写

  • 在子类继承父类时,子类会拥有父类的所有属性和方法
  • 但当父类的方法实现不满足子类需要时,子类可以对方法进行重写,也叫 override

重写父类方法的两种情况

  • 覆盖父类的方法
  • 对父类方法进行扩展

方法重写的类图

Chai 类继承了 Dog 类,重写了 wang 方法

覆盖父类的方法

  • 在开发中,父类的方法和子类的方法功能不同,就可以使用覆盖的方式,在子类中重新编写父类的方法
  • 相当于在子类中定义一个和父类同名的方法并且实现子类特有的功能
  • 重写后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法

实际代码

class Animal:
def eat(self):
print("吃东西...") def drink(self):
print("喝水...") def run(self):
print("跑步...") class Dog(Animal):
def wang(self):
print("汪汪叫...") class Chai(Dog):
def shake(self):
print("小柴柴摇尾巴...") def wang(self):
print("柴犬小声的汪汪叫") chai = Chai()
chai.wang() # 输出结果
柴犬小声的汪汪叫

子类实例方法调用的是子类的 wang 方法,而不是父类的 wang 方法

对父类方法进行扩展

在开发中,子类的方法实现需要包含父类的方法,就可以使用扩展方式

如何扩展

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

super() 详解:https://www.cnblogs.com/poloyy/p/15223443.html

实际代码

class Animal:
def eat(self):
print("吃东西...") def drink(self):
print("喝水...") def run(self):
print("跑步...") class Dog(Animal):
def wang(self):
print("汪汪叫...") class Chai(Dog):
def shake(self):
print("小柴柴摇尾巴...") def wang(self):
# 1、针对子类特有的需求,编写子类独有的代码实现
print("柴犬小声的汪汪叫") # 2、调用父类方法
super().wang() # 3、子类的其他代码块
print("柴犬真可爱") chai = Chai()
chai.wang() # 输出结果
柴犬小声的汪汪叫
汪汪叫...
柴犬真可爱

Python - 面向对象编程 - 子类方法的重写的更多相关文章

  1. Python - 面向对象编程 - MRO 方法搜索顺序

    为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...

  2. Python - 面向对象编程 - 魔术方法(双下划线方法)

    什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...

  3. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  4. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  5. 图解python | 面向对象编程

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...

  6. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  7. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  8. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  9. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

随机推荐

  1. Java键盘获取数据

    java录入键盘数据,整型.浮点型.布尔型.字符串. 通过导入java.util.Scanner实现各类操作 import java.util.Scanner;//导入包 public class H ...

  2. python 之爬虫基本流程

    python 之爬虫基本流程 一 用户获取网络数据的方式: 方式1:浏览器提交请求--->下载网页代码--->解析成页面 方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据 ...

  3. webSocket实现多人聊天功能

    webSocket实现多人在线聊天 主要思路如下: 1.使用vue构建简单的聊天室界面 2.基于nodeJs 的webSocket开启一个socket后台服务,前端使用H5的webSocket来创建一 ...

  4. webrtc编译

    webrtc编译 最近研究 libmediasoupclient,而 libmediasoupclient 又依赖 libwebrtc,所以首先就想着先在windows上编译一个webrtc的库,先是 ...

  5. 华为高斯DB(for MySQL)搭建演示

    产品架构 云数据库 GaussDB(for MySQL)整体架构自下向上分为三层. 存储层: 基于华为DFV存储,提供分布式.强一致和高性能的存储能力,此层来保障数据的可靠性以及横向扩展能力. 存储抽 ...

  6. Jquery遍历复选框选中项

    var ret=''; $('name=chkIds').each(function(){ if($(this).is(':checked')){ ret+=$(this).val()+','; } ...

  7. HttpRunner3源码阅读:7.响应后处理 response.py

    response 上一篇说的client.py来发送请求,这里就来看另一个response.py,该文件主要是完成测试断言方法 可用资料 jmespath[json数据取值处理]: https://g ...

  8. 2019-07-06 sql备忘 连续取最大

    连续最大: SELECT M.* FROM #temp MINNER JOIN (SELECT ISNULL(A.score,0)-b.score AS score,B.id FROM #temp A ...

  9. 洛谷P1879题解

    题面 显然是个状压DP. 看数据范围,不难发现算法复杂度应该是 \(O(n\times 2^n \times 2^n)\) . 显然第一个 \(n\) 是遍历每一行的土地. 后面两个 \(2^n\) ...

  10. 前端人员必会工具-apipost两分钟上手(2分钟玩转apipost)

    本文通过简单介绍如何利用ApiPost调试接口和快速的生成接口文档,让您初步体验ApiPost的魅力! 1. API写完想要测试?试试模拟发送一次请求 新建接口,我想模拟发送请求如下 curl --l ...