Python入门知识点分享——(二十一)多继承和运算符重载

在介绍新的知识之前,我们先对之前的内容做一点补充,在面向对象编程的过程中,一个对象常常被要求具备多方面的功能,从而和多个类产生联系,而这一步的实现就用到了“多继承”。多继承是指一个子类可以继承自多个父类,它可以在一定程度上增强了面向对象编程的灵活性和代码的复用性,实现了更多的功能,

多继承的语法结构如图所示,在单继承的基础上增加了更多的父类。

class People:def career(self):print('我是一名学生')class Boy:def gender(self):print('我是一名男生')class Student(People, Boy):def information(self):People.career(self)Boy.gender(self)print('这是我的自我介绍')Student().information()
我是一名学生
我是一名男生
这是我的自我介绍

需要注意的是,在多继承中如果多个父类具有同名方法,而在子类调用时又未指定具体父类,会在括号中按照从左到右的顺序查找父类中是否包含方法,并调用查找到的第一个方法。

class People:def introduce(self):print('我是一名学生')class Boy:def introduce(self):print('我是一名男生')class Student(People, Boy):passStudent().introduce()
我是一名学生

补充完多继承的知识后,我们进入今天的正题——运算符重载。虽然运算符重载和我们前面所学过的方法重写都是对原有代码重定义来提高效率,但是两者有着以下区别:

  • 概念:运算符重载:运算符重载指的是在编程语言中,对于自定义类型的对象,可以重定义运算符的行为。通过重载运算符,可以使对象能够像内置类型一样进行运算和操作。方法重写:方法重写指的是在面向对象编程中,子类重新定义了父类中已经存在的方法。子类可以通过方法重写来修改继承自父类的方法的行为。
  • 实现方式:运算符重载:运算符重载是通过在自定义类型中定义对应的运算符函数来实现的。运算符函数使用特定的语法和命名规则,用于定义运算符与自定义类型的操作行为。方法重写:方法重写是通过在子类中重新定义与父类中同名的方法来实现的。子类中的重写方法需要与父类中的方法具有相同的名称和签名。
  • 适用对象:运算符重载:运算符重载适用于自定义类型的对象,可以定义它们之间的运算和操作行为。常见的例子包括向量、矩阵、复数等可以进行数学运算的类型。方法重写:方法重写适用于类和继承关系中的对象。子类可以重写父类中已经存在的方法,以改变方法的行为。常见的例子是父类定义了一个通用的方法,子类可以根据自身的特殊需求来重写该方法。
  • 作用:运算符重载:运算符重载可以提高代码的可读性和简洁性,使自定义类型的对象能够像内置类型一样进行运算和操作,增强对象之间的交互和模块化。方法重写:方法重写可以实现多态性,即同一个方法名在不同的子类中可以有不同的实现。方法重写使继承关系中的对象能够根据具体的类型选择合适的行为。

运算符重载需要在类中构建运算符方法,语法结构和示例如下: 

关键字运算方式

__cmp__

比较运算
__add__加运算
__sub__减运算
__mul__乘运算
__truediv__除运算
__mod__求余运算
__pow__乘方运算
class Chongzai:def __init__(self, x1, x2, x3, x4):self.x1 = x1self.x2 = x2self.x3 = x3self.x4 = x4def __mul__(self, other):return Chongzai(self.x1 * other.x1, self.x2 * other.x2, self.x3 * other.x3, self.x4 * other.x4)def __str__(self):return 'Chongzai '+str(self.x1 + self.x2 + self.x3 + self.x4)C1 = Chongzai(2, 3, 4, 5)
C2 = Chongzai(1, 3, 5, 7)
print(C1 * C2)
Chongzai 66

要注意重载运算符函数的返回值个数要和实例对象传入的参数个数相对应,另外我们还需要一个__str__方法来整理返回值的格式。

在pycharm中会显示这样的图标,细心的朋友会发现——这个不是和重写的图标一样吗,实际上这是__str__方法带来的结果,我们点击图标就可以跳转到object类中了。

可以看到这个类定义了许多我们常见的函数方法,像文档方法__doc__、初始化方法__init__等,这些方法通过重写可以配合运算符重载发挥出更好的效果,运算符重载和方法重写这两种手段虽有区别,但是在使用过程中相辅相成,为面向对象编程提供了更多便利。

今天的内容就到这里,感谢观看,欢迎大家批评指正。

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

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

相关文章

QGIS教程 加载shape数据 矢量数据(批量)

一. 前言 本篇文章主要介绍QGIS的使用,包括如何加载矢量shape数据、查看数据属性、如何加载txt属性数据、怎么用脚本批量加载矢量数据等内容。 如果想了解QGIS,可以参考博文: QGIS基本介绍 如果想了解shape数据格式详情,可以参考…

CVE-2023-41892 漏洞复现

CVE-2023-41892 开题,是一个RCE Thanks for installing Craft CMS! You’re looking at the index.twig template file located in your templates/ folder. Once you’re ready to start building out your site’s front end, you can replace this with someth…

leetcode刷题--贪心算法

七. 贪心算法 文章目录 七. 贪心算法1. 605 种花问题2. 121 买卖股票的最佳时机3. 561 数组拆分4. 455 分发饼干5. 575 分糖果6. 135 分发糖果7. 409 最长回文串8. 621 任务调度器9. 179 最大数10. 56 合并区间11. 57 插入区间13. 452 用最少数量的箭引爆气球14. 435 无重叠区间…

设备驱动开发_1

可加载模块如何工作的 主要内容 描述可加载模块优势使用模块命令效率使用和定义模块密钥和模块工作1 描述可加载模块优势 开发周期优势: 静态模块在/boot下的vmlinuz中,需要配置、编译、重启。 开发周期长。 LKM 不需要重启。 开发周期优于静态模块。 2 使用模块命令效率…

【AIGC】Stable Diffusion的ControlNet插件

ControlNet 介绍 ControlNet 插件是 Stable Diffusion 中的一个重要组件,用于提供对模型的控制和调整。以下是 ControlNet 插件的主要特点和功能: 模型控制: ControlNet 允许用户对 Stable Diffusion 中的模型进行精细的控制和调整。用户可以…

应急响应实战笔记01入侵排查篇(2)

第2篇:Linux 入侵排查 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程&…

[GXYCTF2019]禁止套娃

进来发现只有这句话,习惯性访问一下flag.php,发现不是404,那就证明flag就在这了,接下来要想办法拿到flag.php的源码。 这道题是.git文件泄露网页源码,githack拿到index.php源码 这里观察到多次判断,首先要…

电脑监控屏幕软件有哪些(监控电脑屏幕的软件)

随着信息技术的迅猛发展,电脑屏幕监控软件已成为企业、家庭以及教育机构保护数据安全、提升工作效率以及进行行为分析的重要工具。本文将详细介绍几款主流的电脑屏幕监控软件,包括它们的功能、特点以及适用场景,帮助读者更好地了解并选择合适…

Flink理论—容错之状态后端(State Backends)

Flink理论—容错之状态后端(State Backends) Flink 使用流重放和 检查点的组合来实现容错。检查点标记每个输入流中的特定点以及每个运算符的相应状态。通过恢复运算符的状态并从检查点点重放记录,可以从检查点恢复流数据流,同时保持一致性 容错机制不…

python数据分析numpy基础之where三元表达式的矢量化

1 python数据分析numpy基础之where三元表达式的矢量化 python的numpy库的where()函数返回满足条件的索引值,或者返回满足条件和不满足条件的元素值。 用法 numpy.where(condition, [x, y], /)描述 如果x和y没传,则返回满足条件condition的索引值组成…

几道简单的题目练一下手感

第 1 题 【 问答题 】 • 找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&a…

【sgSearch】自定义组件:常用搜索栏筛选框组件(包括表格高度变化兼容)。

sgSearch源码 <template><div :class"$options.name" :expand"expandSearch" :showCollapseBtn"showCollapseBtn"><!-- v-clickoutside"(d) > (expandSearch false)" --><ul class"search-list"&…

【教学类-16-02】20240214《数字卡片1-9(正方形9格)华光彩云_CNKI》

背景需求&#xff1a; 前期坐过长方形A4纸的数字卡片 【教学类-16-01】20221121《数字卡片9*2》&#xff08;中班)_数字卡片pdf-CSDN博客文章浏览阅读897次。【教学类-16-01】20221121《数字卡片9*2》&#xff08;中班)_数字卡片pdfhttps://blog.csdn.net/reasonsummer/artic…

最短路径(dijstra算法,链式前向星,堆优化)

【模板】单源最短路径&#xff08;弱化版&#xff09; 对于这题我们使用邻接矩阵的话会导致弓箭复杂度会大大提升&#xff0c;所以我们就需要学习一种新的数据结构&#xff0c;名叫链式前向星&#xff0c;在链式前向星中&#xff0c;我们需要定义一个结构体数组&#xff0c;其中…

【Go语言】Go项目工程管理

GO 项目工程管理&#xff08;Go Modules&#xff09; Go 1.11 版本开始&#xff0c;官方提供了 Go Modules 进行项目管理&#xff0c;Go 1.13开始&#xff0c;Go项目默认使用 Go Modules 进行项目管理。 使用 Go Modules的好处是不再需要依赖 GOPATH&#xff0c;可以在任意位…

人际交往中的勇气挑战与价值实现

在现代社会中&#xff0c;人与人的接触和交流构成了社会生活的基本脉络&#xff0c;然而&#xff0c;对于许多人来说&#xff0c;与他人建立联系、进行深度沟通确实需要极大的勇气。这种勇气并非源自对未知的恐惧&#xff0c;更多的是对自我袒露、接纳他人以及可能遭遇拒绝或误…

幻兽帕鲁在腾讯云服务器中怎么修改配置?游戏难度、经验倍率等等

幻兽帕鲁的游戏配置文件应该是PalWorldSettings 找到这个文件&#xff0c;就可以修改里面的参数。 如果你是用腾讯云一键部署的幻兽帕鲁&#xff0c;则可以到轻量应用服务器管理界面&#xff0c;找到“应用管理”&#xff0c;里面有个可视化修改游戏参数的面板设置&#xff0…

(11)Hive调优——explain执行计划

一、explain查询计划概述 explain将Hive SQL 语句的实现步骤、依赖关系进行解析&#xff0c;帮助用户理解一条HQL 语句在底层是如何实现数据的查询及处理&#xff0c;通过分析执行计划来达到Hive 调优&#xff0c;数据倾斜排查等目的。 官网指路&#xff1a; https://cwiki.ap…

证明之缺角正方形网格的铺地砖问题

缺角正方形网格的铺地砖问题 “挑战难题&#xff1a;多米诺骨牌与无法覆盖的方格” 这里有个著名的难题。画八横八纵正方形网格&#xff0c;去掉相对的两个角。你能用多米诺骨牌形状的地砖——每一块正好覆盖两个相邻方格&#xff0c;把剩余部分覆盖吗&#xff1f;我在下图中…

[前端开发] JavaScript基础知识 [下]

上篇&#xff1a;JavaScript基础知识 [上] JavaScript基础知识 [下] 字符串数组函数对象 字符串 字符串语法规则&#xff1a;单引号、双引号和反引号的使用 利用双引号"或者单引号所括起来双引号中不能嵌套双引号,单引号中不能嵌套单引号如果要在双引号中嵌套双引号或者…