青少年python系列 42.面向对象-继承

news2024/10/5 19:17:50

青少年python系列目录_老程序员115的博客-CSDN博客

青少年python教学视频ppt源码

        继承?继承啥?提起继承这两个字,最先能够联想到的应该就是子继父业这个成语。还记得之前在我们的课程中提及过,在面向对象编程时,是可以依据生活中的思维方式来进行面向对象编程设计的,同样,在Python的世界里也存在像我们现实生活中的那样,也会有继承一说。

        原来,在Python编程编写类时,并非总是要“白手起家”,从空白开始。如果你接下来要编写的类是另一个已有、现成的类的特殊版本,这时候我们就可以使用类的继承,即一个新的类来继承另一个已有的类。在继承关系发生后,新的类将自动获得另一个类的所有属性和方法,进而不断进化、优化。

        在这里我们称原有的类为父类,而新创建的这个类我们称为子类。子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。继承,你也可以理解为子类是父类的一种发展延伸、完善进化、具象化的一种行为,继承与被继承的两个类存在很强的关联性。

1 子类的继承

        在我们创建子类的实例对象时,Python首先考虑的是给父类的所有属性赋值。为此,子类的方法__init__()需要父类来施以援手。

        电动汽车是一种特殊的汽车,电动汽车是汽车的发展延伸,电动汽车包含但不仅限于汽车所具有的功能特征与外观样式,汽车包括电动汽车。这时,我们就可以认为电动汽车类继承了汽车类。

        我们可以在前面所创建的Car类的基础上,创建新的ElectricCar(电动汽车),用ElectricCar类继承Car类,这样我们就可以只需要描述电动汽车所特有的属性、行为程序代码。下面来创建一个简单的ElectricCar类,它具备Car类的所有功能:

        我们首先需要完成Car类的代码编写。当我们需要创建子类信息的时候,父类程序代码必须包含在当前文件中,并且位于子类前面。在定义子类时,必须在子类名称括号内指定父类的类名称。子类的初始化为接受创建Car实例所需的参数信息一致。

        值得注意的是,程序中的super()方法函数,此方法函数是一个特殊方法函数,它帮助Python将父类和子类建立关联联系。这行代码让Python调用父类Car的__init__()方法来创建子类ElectricCar的__init__()方法,目的是让ElectricCar实例包含父类的所有属性。由于父类也被其他工程师称为超类(superclass),因此关键字super名称因此而来。下面,为测试继承动作是否能够正确地发挥作用,我们来创建一辆电动汽车,并且该电动汽车类中的属性、功能信息与父类相同。

        我们创建ElectricCar类的一个实例对象,并将该实例对象信息存储在变量my_electricCar中。my_electricCar实例对象的创建, Python在逻辑上的运行顺序是这样的:Python自动调用了ElectricCar类中定义的方法__init__(),然后Python深一层的调用父类Car中定义的方法__init__(),最终完成实例对象的创建任务。

        在my_electricCar实例对象创建时,我们传入了了实参'特斯拉(Tesla)', 'model s', 2020。

        在ElectricCar类中,除了__init__()初始化方法之外,没有其他专属电动汽车的属性和方法。我们确认了电动汽车的实例对象是否具备普通汽车的行为,运行结果表明,通过类的继承行为,子类具有了父类的属性与方法。

        下面我们可以试着为ElectricCar类建立电动汽车特有、专属的属性与方法。

2 定义子类属性与方法

        让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。下面来添加一个电动汽车上特有的属性(比如:电动机、蓄电池等),以及一个描述该属性的方法。我们将存蓄电池容量,并创建一个打印蓄电池容量信的方法:

        我们添加了新的电动汽车特有的属性self. battery_size,并设置其初始值70。根据ElectricCar类创建的所有实例对象都将包含battery_size这个属性信息,但所有Car实例对象都不包含它。我们还添加了一个名为battery_describe ()的方法函数,battery_describe ()方法功能是打印有关电池的信息。程序运行后,可以看得到我们调用这个方法函数时,将看到一条关于电动汽车所特有的描述信息。

        在通过程序来模拟现实生活中的电动汽车模型时,你可以根据所需的准确程度添加任意数量的属性和方法。如果一个属性或者方法是任何汽车都有的,而不是电动汽车特有的,就应将这个属性或者方法加入到Car类而不是ElectricCar类中。这样,继承使用Car类的子类将获得相应的功能,而ElectricCar类只包含处理电动汽车特有属性和行为的程序代码,做到分工明确、条理清晰。

3 重写父类的方法

        对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写,函数方法重写行为,你也可以理解子类是在为对父类的函数方法进行优化、拓展以适应子类的功能。

        为此,可在子类中定义一个这样的方法,但它要跟重写的父类方法同名。这样的话,Python就不会考虑父类的这个方法,而只关注你在子类中定义的相应同名、新功能的方法。假设Car类有一个名为energy()的方法,energy()方法的功能是描述汽车行驶的能量之源,虽然普通汽车跟电动汽车一样都需要有描述它的能量之源的方法,两者所要描述的内容是不同的。对普通汽车来说,它的能量之源是燃油,而这对全电动汽车来说是不适用的,电动汽车的能量之源是蓄电池存储的电能。因此,在ElectricCar类继承Car类后,你需要重写energy()方法。

        现在,如果有人对电动汽车调用energy()方法,Python将会忽略父类Car中的energy()方法,转而运行上述代码。我们可以在使用继承时,让子类保留从父类那里继承而来的“精华”,并剔除那些不需要的“糟粕”。

        继承?继承啥?提起继承这两个字,最先能够联想到的应该就是子继父业这个成语。还记得之前在我们的课程中提及过,在面向对象编程时,是可以依据生活中的思维方式来进行面向对象编程设计的,同样,在Python的世界里也存在像我们现实生活中的那样,也会有继承一说。

        原来,在Python编程编写类时,并非总是要“白手起家”,从空白开始。如果你接下来要编写的类是另一个已有、现成的类的特殊版本,这时候我们就可以使用类的继承,即一个新的类来继承另一个已有的类。在继承关系发生后,新的类将自动获得另一个类的所有属性和方法,进而不断进化、优化。

        在这里我们称原有的类为父类,而新创建的这个类我们称为子类。子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。继承,你也可以理解为子类是父类的一种发展延伸、完善进化、具象化的一种行为,继承与被继承的两个类存在很强的关联性。

1 子类的继承

        在我们创建子类的实例对象时,Python首先考虑的是给父类的所有属性赋值。为此,子类的方法__init__()需要父类来施以援手。

        电动汽车是一种特殊的汽车,电动汽车是汽车的发展延伸,电动汽车包含但不仅限于汽车所具有的功能特征与外观样式,汽车包括电动汽车。这时,我们就可以认为电动汽车类继承了汽车类。

        我们可以在前面所创建的Car类的基础上,创建新的ElectricCar(电动汽车),用ElectricCar类继承Car类,这样我们就可以只需要描述电动汽车所特有的属性、行为程序代码。下面来创建一个简单的ElectricCar类,它具备Car类的所有功能:

        我们首先需要完成Car类的代码编写。当我们需要创建子类信息的时候,父类程序代码必须包含在当前文件中,并且位于子类前面。在定义子类时,必须在子类名称括号内指定父类的类名称。子类的初始化为接受创建Car实例所需的参数信息一致。

        值得注意的是,程序中的super()方法函数,此方法函数是一个特殊方法函数,它帮助Python将父类和子类建立关联联系。这行代码让Python调用父类Car的__init__()方法来创建子类ElectricCar的__init__()方法,目的是让ElectricCar实例包含父类的所有属性。由于父类也被其他工程师称为超类(superclass),因此关键字super名称因此而来。下面,为测试继承动作是否能够正确地发挥作用,我们来创建一辆电动汽车,并且该电动汽车类中的属性、功能信息与父类相同。

        我们创建ElectricCar类的一个实例对象,并将该实例对象信息存储在变量my_electricCar中。my_electricCar实例对象的创建, Python在逻辑上的运行顺序是这样的:Python自动调用了ElectricCar类中定义的方法__init__(),然后Python深一层的调用父类Car中定义的方法__init__(),最终完成实例对象的创建任务。

        在my_electricCar实例对象创建时,我们传入了了实参'特斯拉(Tesla)', 'model s', 2020。

        在ElectricCar类中,除了__init__()初始化方法之外,没有其他专属电动汽车的属性和方法。我们确认了电动汽车的实例对象是否具备普通汽车的行为,运行结果表明,通过类的继承行为,子类具有了父类的属性与方法。

        下面我们可以试着为ElectricCar类建立电动汽车特有、专属的属性与方法。

2 定义子类属性与方法

        让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。下面来添加一个电动汽车上特有的属性(比如:电动机、蓄电池等),以及一个描述该属性的方法。我们将存蓄电池容量,并创建一个打印蓄电池容量信的方法:

        我们添加了新的电动汽车特有的属性self. battery_size,并设置其初始值70。根据ElectricCar类创建的所有实例对象都将包含battery_size这个属性信息,但所有Car实例对象都不包含它。我们还添加了一个名为battery_describe ()的方法函数,battery_describe ()方法功能是打印有关电池的信息。程序运行后,可以看得到我们调用这个方法函数时,将看到一条关于电动汽车所特有的描述信息。

        在通过程序来模拟现实生活中的电动汽车模型时,你可以根据所需的准确程度添加任意数量的属性和方法。如果一个属性或者方法是任何汽车都有的,而不是电动汽车特有的,就应将这个属性或者方法加入到Car类而不是ElectricCar类中。这样,继承使用Car类的子类将获得相应的功能,而ElectricCar类只包含处理电动汽车特有属性和行为的程序代码,做到分工明确、条理清晰。

3 重写父类的方法

        对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写,函数方法重写行为,你也可以理解子类是在为对父类的函数方法进行优化、拓展以适应子类的功能。

        为此,可在子类中定义一个这样的方法,但它要跟重写的父类方法同名。这样的话,Python就不会考虑父类的这个方法,而只关注你在子类中定义的相应同名、新功能的方法。假设Car类有一个名为energy()的方法,energy()方法的功能是描述汽车行驶的能量之源,虽然普通汽车跟电动汽车一样都需要有描述它的能量之源的方法,两者所要描述的内容是不同的。对普通汽车来说,它的能量之源是燃油,而这对全电动汽车来说是不适用的,电动汽车的能量之源是蓄电池存储的电能。因此,在ElectricCar类继承Car类后,你需要重写energy()方法。

        现在,如果有人对电动汽车调用energy()方法,Python将会忽略父类Car中的energy()方法,转而运行上述代码。我们可以在使用继承时,让子类保留从父类那里继承而来的“精华”,并剔除那些不需要的“糟粕”。

总结

1、子类的继承

        子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。

2、定义子类属性与方法

        让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。

3、重写父类的方法

        对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】关于进程的理解、状态、优先级和进程切换

文章目录📝一、操作系统进程1.运行队列2.运行状态📝二、Linux进程状态📝三、两个特殊进程1.僵尸进程2.孤儿进程📝四、进程优先级1.优先级概念2.查看系统进程3.PRI和NI4.top命令更改nice5.特性📝五、进程切换1.并发2.进…

软件工程方法论

🐰作者简介:一位普通高校的在校学生,致力于提高自己的编程能力。 🍌个人主页:比昨天强一點的博客_CSDN博客-C语言从0到精通领域博主 🍍系列专栏:C语言从0到精通_比昨天强一點的博客-CSDN博客 &a…

真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你

Python网络编程基本概念(计算机网络基础)IP地址与端口IP地址端口网络通信协议网络通信协议网络协议的分层TCP/UDP套接字编程socket()函数介绍UDP 编程实现UDP发送数据实现UDP先发送数据再接收数据实现UDP实现多线程聊天TFTP文件下载器基本概念下载的过程python内置模块structTC…

C/C++ Qt 标准Dialog对话框组件应用

在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,QFileDialog 这几种,这里我将总结本人在开发过程中常用…

蓝桥杯——2022年11月第十四届蓝桥杯模拟赛第一期Java

1、二进制位数 问题描述 十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。 十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。 请问十进制整数 2022 在二进制中是几位数? 答案…

C++学习之旅 第二章 printf与cout

目录 1.printf简介 2.printf的四种用法 2.1 printf("字符串"); 2.2 printf("输出控制符",输出参数); 2.3 printf("输出控制符1 输出控制符2 ,,,,,,,, ", 输出参数1, 输出参数2,....... ); 2.4 printf("输出控制…

化妆品展示网页设计作业 静态HTML化妆品网站 DW美妆网站模板下载 大学生简单网页作品代码 个人网页制作 学生个人网页设计作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

C++11【智能指针详解】

智能指针🏞️1. 为什么引入智能指针?🌁2. 智能指针的使用及原理📖2.1 RAII思想📖2.2 智能指针的原理🌠3. 常见智能指针📖3.1 auto_ptr📖3.2 unique_ptr📖3.3 shared_ptr&…

基于深度学习的宋词生成

《自然语言处理》课程报告 摘 要 宋词是一种相对于古体诗的新体诗歌之一,为宋代儒客文人智慧精华,标志宋代文学的最高成就。宋词生成属于自然语言处理领域的文本生成模块,当前文本生成领域主要包括基于语言模型的自然语言生成和使用深度学习…

RK3568平台开发系列讲解(安卓适配篇)Android 源码的 device 目录

🚀返回专栏总目录 文章目录 一、device 目录简介二、Android 产品配置各种变量沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 Android 源码的 device 目录。 一、device 目录简介 Android 源码下的 device 目录是 Android 源码中对产品的描述文件夹,各…

STM32个人笔记-CAN总线通讯

笔记来源于STM32F103VET6,野火指南者,中文参考手册,HAL库开发手册和b站的野火指南者视频。观看过好多次了,但往往理解得不够全面,现记下小笔记,用来回顾。属于个人笔记。​​​​​ 大四实习那年记忆颇深…

基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅👇&#x1f…

K线形态识别_空方尖兵

写在前面: 1. 本文中提到的“K线形态查看工具”的具体使用操作请查看该博文; 2. K线形体所处背景,诸如处在上升趋势、下降趋势、盘整等,背景内容在K线形态策略代码中没有体现; 3. 文中知识内容来自书籍《K线技术分析》…

第九章 内置模块

目录 第九章 内置模块 1.math模块 1.查看: 2.常用方法: 2.random模块 1.查看: ​2.例: 3.random(a,b) 4.random.sample(range(0,20),10) 3.os模块与os.path模块 1.作用 2.目录 3.os模块与操作系统的关系 4.路径 5.判…

自我实现tcmalloc的项目简化版本

项目介绍 该项目是基于现代多核多线程的开发环境和谷歌项目原型tcmalloc的自我实现的简化版本,相比于本身就比较优秀的malloc来说,能够略胜一筹,因为其考虑了 性能,多线程环境,锁竞争和内存碎片的问题,主要利用了池化思想来管理内存分配,对于每个线程,都有自己的私…

鸿蒙开发套件全面升级,助力鸿蒙生态蓬勃发展

目录 1. 全场景分布式系统 2. HarmonyOS的超能力:ArkTS API万箭齐发 3.解锁“鸿蒙开发套件”的新技能 (1) 智能代码编辑器 (2)Hvigor编译构建 (3)热重载:向看直播一样查看运行…

MySQL : 彻底搞懂一条SQL的执行过程

整体流程 组件介绍 连接器 处理客户端的连接,一般处理我们这个命令,判断是否满足接入server的条件 mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P root查询缓存 在8.0之前,如果用户开启了查询缓存的开关,那么…

vue2.6 + ts 使用vuex

目录vue2.6 ts 使用vuex安装01:直接使用 store / index.ts的数据store / index.tsmain.ts001:同步mutation操作vuex数据与获取getters001:效果002:异步action、mutation操作vuex数据002:效果02:引入其他模…

CANoe 简介

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Go 语言项目源码解析:定时任务库 cron

环境准备 首先我们将源码克隆(Fork)为自己的个人仓库,只需要在 GitHub 项目主页点击 Fork 按钮,然后输入项目名称点击确认即可。克隆完毕后,可以下载到本地,或者直接在科隆后的 GitHub 仓库主页上点击 Cre…