位置: 编程技术 - 正文

Python编程中对super函数的正确理解和用法解析(对于python程序,对代码缩进的要求非常严格)

编辑:rootadmin

推荐整理分享Python编程中对super函数的正确理解和用法解析(对于python程序,对代码缩进的要求非常严格),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pythonsub,python,super,对于python程序,对代码缩进的要求非常严格,python的isupper,pythonsum,编程中的python,python的isupper,python \s+,内容如对您有帮助,希望把文章链接给更多的朋友!

当在子类需要调用父类的方法时,在python2.2之前,直接用类名调用类的方法,即非绑定的类方法,并把自身对象self作参数传进去。

输出

这样运作挺好,不过有个问题,当父类改了名字时,就要把这些显式调用父类的一个个更正,子类和父类耦合比较高。于是python2.2后就推出了super()函数来避免硬编码,不用关心父类名叫什么。使用super()函数,上面的代码可以写成如下。

python3.0后,又做了改良,super()函数不用传参数,即上面的那行代码直接super().say()就行了。

需要注意的问题:

super只能用在新式类中。 super在多重继承有问题,如果子类继承多个父类,那么super调用第一个父类的方法。 不要混用这两种调用父类方法的方案,要么都用非绑定的类方法,要么都用super。不然可能导致没被调用或者被调用多次。

BUT:不要一说到 super 就想到父类!super 指的是 MRO 中的下一个类!一说到 super 就想到父类这是初学者很容易犯的一个错误,也是我当年犯的错误。

两个参数 cls 和 inst 分别做了两件事:1. inst 负责生成 MRO 的 list2. 通过 cls 定位当前 MRO 中的 index, 并返回 mro[index + 1]这两件事才是 super 的实质,一定要记住!MRO 全称 Method Resolution Order,它代表了类继承的顺序。

Python编程中对super函数的正确理解和用法解析(对于python程序,对代码缩进的要求非常严格)

举个例子:

输出

知道了 super 和父类其实没有实质关联之后,我们就不难理解为什么 enter B 下一句是 enter C 而不是 this is Root(如果认为 super 代表“调用父类的方法”,会想当然的认为下一句应该是this is Root)。流程如下,在 B 的 __init__ 函数中:

首先,我们获取 self.__class__.__mro__,注意这里的 self 是 D 的 instance 而不是 B 的

(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.Root'>, <type 'object'>)

然后,通过 B 来定位 MRO 中的 index,并找到下一个。显然 B 的下一个是 C。于是,我们调用 C 的 __init__,打出 enter C。

顺便说一句为什么 B 的 __init__ 会被调用:因为 D 没有定义 __init__,所以会在 MRO 中找下一个类,去查看它有没有定义 __init__,也就是去调用 B 的 __init__。

其实这一切逻辑还是很清晰的,关键是理解 super 到底做了什么。

Python使用ntplib库同步校准当地时间的方法 NTP(NetworkTimeProtocol)是由美国德拉瓦大学的DavidL.Mills教授于年提出,设计用来在Internet上使不同的机器能维持相同时间的一种通讯协定。NTP估算封包

Python使用迭代器打印螺旋矩阵的思路及代码示例 思路螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。螺旋矩阵用二维数组表

Python彩色化Linux的命令行终端界面的代码实例分享 先看看效果:在linux的终端中,ANSI转义序列来控制颜色基本规则:前面加上[,结尾用[0m重置为原来的颜色可以在终端中输入下面这句,就可以看到输

标签: 对于python程序,对代码缩进的要求非常严格

本文链接地址:https://www.jiuchutong.com/biancheng/387024.html 转载请保留说明!

上一篇:Python中的复制操作及copy模块中的浅拷贝与深拷贝方法(python复制sheet)

下一篇:Python使用ntplib库同步校准当地时间的方法(python ntlk)

  • 驾驶培训 增值税
  • 金税盘解锁后是否可以直接使用
  • 六税一费优惠政策
  • 应付账款应收账款
  • 代开普通发票需提供哪些材料
  • 增值税发票抵扣是什么意思
  • 个人保险怎么办理
  • 如何在金蝶算季度利润表发生额
  • 非税收入专用申报表
  • 经营活动产生的净现金流量计算公式
  • 分公司没有业务季报怎么处理
  • 收到投资款如何写凭证
  • 担保人的损失
  • 企业年金需要缴纳个人所得税吗
  • 企业临时账户是什么意思
  • 增值税系统技术维护费记什么科目
  • 诉讼管辖分为
  • 企业间借款利息涉税处理
  • 租赁合同印花税税率2023
  • 延期缴纳税款的条件是什么
  • 二手车抵押银行贷款
  • 企业的应付账款确实无法支付,经确认后转作
  • 预计负债怎么计提递延所得税资产
  • 企业购入的固定资产,均要先计入在建工程
  • 企业社会贡献总结怎么写
  • 保险赔款确认函
  • 常见的电脑病毒危害
  • 苹果推送改不掉三全音
  • 强制关闭mac系统的快捷键
  • 洗牙的利和弊
  • 月末账务结转
  • win10右键菜单管理在哪打开
  • 无偿受赠房产出售税费
  • 原材料的运费计入什么科目
  • php与jquery
  • 差旅费包干什么意思
  • 增值税有哪些类型的税种
  • 取得投资是什么意思
  • 前端cli搭建
  • 公司注销账面实收资本如何处理
  • list集合过滤
  • 工资费用核算
  • 永续债利息可以扣除嘛
  • 公司注册登记需要提交的资料包括
  • 影响公司股利分成的因素
  • SqlServer 2005 T-SQL Query 学习笔记(1)
  • 承兑能随便给别人看吗
  • 在零售环节征收消费税的是哪些
  • 巧妙利用谐音的广告语
  • 无票收入怎么计算
  • 房地产开发公司注册条件
  • 进口关税免征
  • 库存现金管理是财务分析的吗
  • 成本费用总额包括营业外支出吗
  • 社保滞纳金可以免除吗
  • 融资租赁的固定资产可以一次性扣除吗
  • 待抵扣进项税额
  • 绿化补偿标准
  • 固定资产改变用途折旧处理
  • 本单位职工可以在本单位兼职吗
  • 三星电脑安装系统为什么进入不了安装页面
  • 国内的windows是正版吗
  • winpe安装系统教程
  • windows7怎么说
  • 丢失msvcr80.dll
  • linux指令系统
  • 天气应用程序(weather)app免费下载
  • 歌词特效是怎么弄的
  • win10总连不上网
  • PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
  • alt用不了
  • sqlite数据库修改及升级
  • python3.9爬取网页教程
  • js中eval函数是干嘛的
  • jquery 表格插件
  • 安卓layout布局
  • python3 re
  • 西安市经开区管委会官网
  • 电子税务局改版
  • 南京国家税务局网上办税服务厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设