位置: 编程技术 - 正文

深入解析Python编程中super关键字的用法(python讲解)

编辑:rootadmin

推荐整理分享深入解析Python编程中super关键字的用法(python讲解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python程序解析,python解析jmx,读懂python代码,深入理解python,python 解析算法,python的编码和解码,python 解析算法,python代码理解,内容如对您有帮助,希望把文章链接给更多的朋友!

官方文档中关于super的定义说的不是很多,大致意思是返回一个代理对象让你能够调用一些继承过来的方法,查找的机制遵循mro规则,最常用的情况如下面这个例子所示:

子类C重写了父类B中同名方法method,在重写的实现中通过super实例化的代理对象调用父类的同名方法。

super类的初始方法签名如下:

除去self外接受一个或者或者两个参数,如同注释声明的一样,接受两个参数时返回的是绑定的super实例,省略第二个参数的时候返回的是未绑定的super对象。

一般情况下当调用继承的类方法或者静态方法时,并不需要绑定具体的实例,这个时候使用super(type, type2).some_method就能达到目的,当然super(type, obj)在这种情况下也能够使用,super对象有自定义实现的getattribute方法也能够处理。不过,后者一般用来调用实例方法,这样在查找方法的时候能够传入相应的实例,从而得到绑定的实例方法:

初始化super对象的时候,传递的第二个参数其实是绑定的对象,第一个参感觉数可以粗暴地理解为标记查找的起点,比如上面例子中的情况:super(B, b).test就会在B.__mro__里面列出的除B本身的类中查找方法test,因为方法都是非数据描述符,在super对象的自定义getattribute里面实际上会转化成A.__dict['test'].__get__(b, B)。

super在很多地方都会用到,除了让程序不必hardcode指定类型让代码更加动态,还有其他一些具体必用的地方比如元类中使用super查找baseclass里面的new生成自定义的类型模板;在自定义getattribute的时候用来防止无限循环等等。

关于super建议读者将它与python的描述符一起来理解,因为super就实现了描述符的协议,是一个非数据描述符,能够帮助大家更好的理解super的使用和工作原理。

同时,有以下4个点值得大家注意:1、单继承时super()和__init__()实现的功能是类似的

输出结果:

使用super()继承时不用显式引用基类。

2、super()只能用于新式类中

把基类改为旧式类,即不继承任何基类

执行时,在初始化b时就会报错:

3、super不是父类,而是继承顺序的下一个类

深入解析Python编程中super关键字的用法(python讲解)

在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类,而不是父类,类似于这样的功能:

mro()用来获得类的继承顺序。

例如:

输入结果如下:

supder和父类没有关联,因此执行顺序是A —> B—>—>Base

执行过程相当于:初始化childC()时,先会去调用childA的构造方法中的 super(childA, self).__init__(), super(childA, self)返回当前类的继承顺序中childA后的一个类childB;然后再执行childB().__init()__,这样顺序执行下去。

在多重继承里,如果把childA()中的 super(childA, self).__init__() 换成Base.__init__(self),在执行时,继承childA后就会直接跳到Base类里,而略过了childB:

从super()方法可以看出,super()的第一个参数可以是继承链中任意一个类的名字,

如果是本身就会依次继承下一个类;

如果是继承链里之前的类便会无限递归下去;

如果是继承链里之后的类便会忽略继承链汇总本身和传入类之间的类;

比如将childA()中的super改为:super(childC, self).__init__(),程序就会无限递归下去。

如:

4、super()可以避免重复调用

如果childA基础Base, childB继承childA和Base,如果childB需要调用Base的__init__()方法时,就会导致__init__()被执行两次:

Python的网络编程库Gevent的安装及使用技巧 安装(以CentOS为例)gevent依赖libevent和greenlet:1.安装libevent直接yuminstalllibevent然后配置python的安装2.安装easy_install(1)wget-

Python的装饰器用法学习笔记 在python中常看到在定义函数是使用@func.这就是装饰器,装饰器是把一个函数作为参数的函数,常常用于扩展已有函数,即不改变当前函数状态下增加功能.defr

python安装mysql-python简明笔记(ubuntu环境) 本文讲述了python安装mysql-python的方法。分享给大家供大家参考,具体如下:ubuntu系统下进行的操作首先安装了pip工具sudoapt-getinstallpython-pip然后使用sudopip

标签: python讲解

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

上一篇:深入了解Python数据类型之列表(python的了解)

下一篇:Python的网络编程库Gevent的安装及使用技巧(python网络编程从入门到精通)

  • 车船税每年都要交吗不交有什么影响
  • 房产税的计税基础包括契税吗
  • 出口免税收入会退税吗
  • 税金及附加借贷科目
  • 残保金属于税种吗
  • 劳务报酬和工资薪金哪个税率高
  • 依法确定的其他扣除项目包括
  • 非贸易付汇去银行汇款流程
  • 建筑业异地预缴增值税流程
  • 嵌入式软件产品增值税即征即退
  • 残保金上年在职工资总额
  • 供应商价格折扣
  • 增值税税率零税率
  • 深圳报关费用是多少
  • 报税没有报怎么办
  • 代扣代缴增值税纳税义务发生时间
  • 加计扣除汇算清缴怎么调减
  • 年底进项税和销项税怎么记
  • 为外国公司提供境内服务
  • 退以前年度所得税会计分录
  • 财务负责人必须是本公司员工吗
  • 居民企业之间以非货币资产进行投资
  • 影响盈利能力的外部因素
  • 应收账款一般按实际发生额入账
  • 交易性金融资产公允价值变动计入
  • 误餐费怎么入账
  • 1697509666
  • 如何维护电脑系统安全?
  • 如何更改应用商店
  • PHP:session_register_shutdown()的用法_Session函数
  • 偷税漏税如何处罚
  • 纳税申报方式有直接申报邮寄申报数据电文
  • 什么叫集团内企业
  • uniapp 信息推送
  • 亏损企业所得税汇算清缴怎么做
  • 清算资金往来的余额方向
  • 支票的提示付款期限为自出票日期
  • 初级职称到中级职称需要上继续教育课吗
  • 30岁之后去面试
  • vue中created和mounted
  • 论文阅读网站排行榜
  • 商贸公司用什么名字最好
  • 增值税怎样交
  • 劳动仲裁支付的赔偿金怎么入账
  • 记账和结账可以一起用吗
  • 测验3: 基本数据类型 (第3周)
  • 现金管理的四个方面
  • 帝国cms整合Elasticsearch
  • 会员退费会计分录
  • sqlserver查询时报00bop错误
  • mysql客户端程序的功能是什么
  • 期初在产品怎么算
  • 工业销售产值是销售收入吗
  • 建筑公司支付给农民工的工资需要取得发票吗
  • 白酒系列代理
  • 已认证抵扣的进项税额怎么填报表
  • 车子以旧换新还能贷款吗
  • 合理损耗怎么算
  • 机器配件属于什么类型的商品
  • 以前年度调整要更正申报吗
  • 小企业如何建立风险管理制度
  • win7旗舰版怎么改成专业版
  • OS X 10.10 Yosemite的新特性与iOS联系更紧密
  • intel8代装win7
  • servers.mcs
  • linux中的top命令
  • win7系统无法自动检测此网络的代理设置
  • android开发环境配置
  • bootstrap页面代码
  • node.js入门
  • django模块详解
  • Error: String types not allowed (at 'layout_gravity' with value 'bottom/center_horizontal').
  • html收藏夹导入
  • jquery鼠标点击事件怎么写
  • JavaScript+html5 canvas制作的圆中圆效果实例
  • python 字符
  • 对税务领导的批示怎么写
  • 亦庄地税局税务局营业大厅
  • 公司买的保险怎么查询保单明细
  • 郑州市地方税务局新郑国际机场分局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设