位置: 编程技术 - 正文

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)

  • 个人出租非住房房产税怎么计算
  • 境外承包工程项下资金
  • 国际重复征税的前提条件是
  • 异地预缴的企业所得税可以抵扣吗
  • 增值税进项税销项税
  • 全年一次性奖金税率表
  • 要约收购期满
  • 发票备注没写
  • 银行回单附言写错业务
  • 某公司是一家刚成立的大型化妆品生产企业
  • 企业注销递延所得税资产怎么处理
  • 所得税汇算清缴报告在哪查
  • 待摊费用跨年冲销如何入账?
  • 开办费一次性摊销企业所得税
  • 2018工资个税税率表
  • 单位给员工买车怎么买
  • 代扣代缴企业所得税10%
  • 关于增值税报税的通知
  • 6位开票代码是几位数
  • 合同违约补偿款需要缴纳增值税吗?
  • 商贸公司购买货物会计分录
  • 企业汇算清缴前的票可以入账吗
  • 小微企业怎么合法避税
  • 外币报表折算差额怎么算
  • 物业公司收的电梯费如何做账
  • 租金返还方式销售
  • 电子产品企业用电量大吗
  • 小规模纳税人建筑行业
  • 利润调整分录
  • 不需要缴纳增值税和免税的区别
  • 企业的污水处理设备可以间断性运行么
  • 主营业务税金及附加包括什么
  • flash设置旋转
  • iphone11 iphone10区别
  • 排污费应计入什么会计科
  • 担保损失会计分录
  • logd是什么进程
  • 子公司取得投资收益
  • 嘴型融合 wav2lip 升级版
  • 在代开发票时已经预缴个人所得税了,怎么处理?
  • php2008
  • php处理大文件
  • 超参数及其作用
  • 销项税太多
  • 预缴的附加税需要转出吗
  • 帝国cms自动推送插件
  • python中datetime.datetime
  • 固定资产怎么确认价值
  • 社保代扣代缴的办理流程
  • 企业利润分配的含义
  • 两处取得工资薪金如何申报
  • 停车费比油费还贵
  • 管理费用算营业外支出吗
  • 对于产品开发阶段的评价
  • 退休人员的返聘协议模板
  • 房屋租赁费怎么记账
  • 房租转租怎么处理合法
  • 预付款充值发票
  • 支付外债利息要代扣代缴哪几个税
  • 生产成本结转到本年利润吗
  • SQL Select语句完整的执行顺序
  • vista升级选项灰色
  • 多台电脑ip地址设置
  • ubuntu屏幕截图快捷键
  • SSSvr.exe - SSSvr是什么进程
  • winxp远程桌面
  • windows 8.1 build 9600
  • win7一直配置
  • windows 10为什么不能关掉自动更新
  • windows 10 build 21382
  • unity udim
  • jquery日期控件onchange事件
  • unity安卓手机游戏官网
  • js创建对象的三种方式
  • js跨域的几种方法
  • js实现回文
  • jqueryfilter
  • 河北电子税务局手机app
  • 深圳在线ca办理平台
  • 百望税控盘电子发票开好了如何打印及导出发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设