继承的详解

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. 获取不到自定义的request的header属性

    java获取headers的代码如下: // 获取http-header里面对应的签名信息 Enumeration<?> headerNames = request.getHeaderNa ...

  2. 从事IT行业 vs 玩卡牌手游

    我曾经玩过一款手游,它一直不停地推出新的更高品质的道具和人物,新出的东西比旧的东西拥有更强力的功能,要想保持领先就必须一直充钱出新东西才行.不管你以前充了十几万还是几十万,如果有半年不充,那就会被新区 ...

  3. 重返MySQL之MySQL基础

    重返MySQL之MySQL基础 本章详细介绍了,什么是数据库,常见的关系型数据库有哪些,什么是MySQL,及MySQL中DDL操作表,DML操作表记录. 1.0 数据库概述 1.1 数据存储的方式 目 ...

  4. 每个程序员的必经之路:Hello,world!

    每个程序员的必经之路:Hello,world! Java 源程序 也称源代码,是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令. 在现代程序语言中,源代码可以是以 ...

  5. [JS]异步任务之事件循环

    前言 常常会听到单线程和多线程这两个名词,单线程即一个时间段内程序从上到下执行任务,多线程即一个时间段内程序同时执行多个任务. 然而 JavaScript 是单线程的,它不像 Java 那样新开启一个 ...

  6. 自学linux——15.云主机的购买流程及域名的购买备案解析

    项目上线流程 一.服务器选配购买 项目上线的服务器必须是外网服务器 1.服务器购买情况 真实服务器(成本过高,购买内部自用) 云服务器(上线首选):阿里云,腾讯云,华为云 2.购买阿里云服务器:htt ...

  7. Python正则表达式re库的初次使用入门

    正则表达式常用操作符: 操作符 说明 实例 . 表示任何单个字符,不包括换行符 [] 字符集,对单个字符给出取值范围 [abc]表示a.b.c,[a-z]表示a到z单个字符 [^ ] 非字符集 [^a ...

  8. Note about Cobertura

    Workflow of Unit Test without Cobertura compile source code; compile test code; run unit test; Workf ...

  9. 【笔记】Bagging和Pasting以及oob(Out-of-Bag)

    Bagging和Pasting以及oob(Out-of-Bag) Bagging和Pasting 前面讲到soft voting classifier和hard voting classifier两个 ...

  10. 使用Postfix与Dovecot收发电子邮件(物理机虚拟机之间)

    邮件应用协议包括: 简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,占用tcp 25端口. 第三版邮局协议(POP3),用于将服务器上把邮件存储到本地主机,占用tcp 110端口. 第四版 ...