范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python入门精华OOP调用父类的方法及MRO方法解析序列

  在继承关系中,我们想调用已经被覆盖了的父类的方法,就需要如下实现:
  解决方法:
  要调用父类中的方法,就要使用超类(超集)方法super(),该方法旨在调用已经被覆盖的父类的成员方法。class Aclass: 	def __init__(self): 		self.a = None 	def prtInfo(self): 		print("hello world!")  class Bclass(Aclass): 	def __init__(self,b): 		self.b = b 		super().__init__() #调用父类的构造函数,保证父类被正常的初始化了 	def prtInfo(self): 		print("hello python") 		super().prtInfo()
  讨论:
  有关python是如何实现继承的?
  针对每一个定义的类,都会计算出一个成为方法解析顺序(MRO)的元组,其只是简单的对所有基类进行简单地线性排列。class Base:     def __init__(self):         print("Base.__init__") class A(Base):     def __init__(self):         super().__init__()         print("A.__init__") class B(Base):     def __init__(self):         super().__init__()         print("B.__init__") class C(A,B):#多重继承     def __init__(self):         super().__init__()         print("C.__init__") c = C() #结果为: """ Base.__init__ B.__init__ A.__init__ C.__init__ """ print(C.__mro__)#调取C类的MRO表 #结果为: """ (, , , , ) """
  通过上述的C类调用MRO表,我们不难看出,它将本类开始一直到object类直接所有的父类一次性从左向右逐层向上的排列了出来(先排列自己,在排列自己的父类,最后排列父类的父类,以及最后的object)
  然而MRO为何如此排列,这里要涉及到一个非常令人讨厌的数学算法,C3线性化处理,这里只是总结其三个约束:(简单点说,其实就是对父类进行归并排列)
  1、先检查子类,再检查父类
  2、有多个父类时,按照MRO表的顺序依次查看
  3、如果下一个待选的类出现了两个合法的选择,那么就从第一个父类中选取。
  4、补充一点:MRO对类的排序几乎适用于任何定义的类层次结构。
  来了来了,它真的来了:重点~~
  有很多同学是否仔细看过上边的代码?class C(A,B):#多重继承     def __init__(self):         super().__init__()         print("C.__init__") #为何输出结果是: """ Base.__init__ B.__init__ A.__init__ C.__init__ """ #按照上述概念不觉得是: """ Base.__init__ A.__init__ B.__init__ C.__init__ """#或者除了正确结果以外的所有结果更为合适??(只要不是正确结果都是对的)
  有关super()函数,以下重点需要各位明白:
  在重写的方法中仅使用一次super()方法时,会按照MRO表从下一个类开始搜索对应的方法或属性,以此类推。 所以C中重写了父类的构造,构造中有super,所以会按照顺序去查找MRO中下一个类的方法,发现A中也有super,就会再去B中找对应的方法(同名方法是__init__),所以找到B的构造,可是B中又有super,就会再去MRO中B的下一个类(Base)中找对应的方法(Base的__init__()方法),所以会先打印"Base.__init__",打印完后又因为B的__init__中还有打印"B.__init__",所以接着打印‘B.__init__’,又因为打印完后A中还有打印"A.__init__",所以再打印"A.__init__",最后打印"C.__init__"。这样就可以遍历MRO整张表中所有的对应的__init__()方法,并且让每个方法只会被调用一次。
  为了更好的记忆:当所有重写的方法中只使用了一次super函数时,会从最上层的类依次调用其指定的方法即可以理解为(object->Base->B->A->C)。
  所以,输出结果为:""" Base.__init__ B.__init__ A.__init__ C.__init__ """
  甚至于如下情况更为耐人寻味,仔细品一品:class A:     def prt(self):         print("A")         super().prt()  class B:     def prt(self):         print("B")  class C(A,B):     pass  c = C() c.prt() #c.prt()的打印结果为: """ A B """ print(C.__mro__)#(, , , )
  值的一提的是:AB均没有显式的继承的父类,为何结果为打印‘AB’呢?这里就要理解MRO的含义了哦!

根大木秀MG沙漠高达EW作者age文章转自78DMMGew五小强算是凑齐了,不过目前还再等新素体的KA飞翼,希望能快点。说来搞笑,沙漠ew的通贩非但没有失去价值,反而因为狗财团俩PB都不给电热刀加热模式显杨幂穿黑色深V礼裙成熟优雅气场全开,不亏是大幂幂杨幂分享了某日look,这位美女红星穿着时尚,俏脸清纯,秀眸妩媚,脖戴项链,大秀自己的天鹅颈,还是很性感多姿的。杨幂是一代当红女星,她以前曾接演神雕侠侣美人心计宫锁心玉逆时营救刺杀京东数码大势新品赏上线降噪耳机等潮流新品带你畅享宅家出游乐眼看又是一年团圆节,在外奔波的你或许还在为一张回家的车票而绞尽脑汁,但归家的心早已飞向远方。当你默默盘算着假期的规划,要陪伴年迈的父母看看剧谈谈心,要好好了解下孩子的学习情况,及时快速get七夕送礼清单这些数码新品闭眼入,高性价比不踩雷很快就是七夕节了,每到这个时候就有不少人为了送什么礼物而犯愁,会担心太俗气不实用的礼物不仅讨不到对方的欢心,可能还会适得其反。其实大家也不必太纠结,很多数码产品都很值得考虑,今天就卡友地带领导莅临中宝石油总部参观考察7月20日下午,卡友地带领导莅临中宝石油总部,参观考察中宝城市石油运营中心和橇装式加油站供油服务项目,中宝石油党支部书记吴金岩全国运营中心CEO潘天印等相关领导作陪。首先,吴金岩书美团点评换个玩法战支付虽已错失布局移动支付的良机,但美团点评做支付之心不死,只不过换了个玩法。2018年底,咨询机构派盟发布了聚合支付行业发展报告2018,新经济沸点在聚合支付服务商综合服务影响力TOP日本兵帽子上的两块垂布有何用竟然有这么多作用经常看抗日题材电影电视剧的朋友,对小日本军装的恐怕最熟悉不过了,我们会发现,日本的军装帽子上有两片垂布,按我们今天的观念来看,军装这样设计看上去难免有失威仪,为何日军要在军装子子上带惯性导航的GPS模块,SKYLAB车载组合导航模块为填补弱信号环境导航缺陷,SKYLAB基于GNSS卫星定位的技术基础上,增加INSDR惯性导航技术,研发推出满足车载导航对弱信号环境高精度定位需求的带惯性导航的GPS模块,车载组合下沉市场购买欲评估宜家宣布开放官方小程序商城商务部推动实体商业企业数字化4月1日,商务部召开例行新闻发布会,商务部新闻发言人高峰表示,为支持新型消费发展,培育完整的内需体系,商务部将打造新型消费的网络结点。加快国际消费中心城串口WiFi蓝牙组合模块LCS2028优势应用详解SKYLAB随着物联网的发展,集成了WiFi蓝牙两种无线通信技术的无线组合模块广泛应用在各行业领域,赋予智能终端数据采集数据传输数据上传及无线上网功能。本篇SKYLAB小编就为大家详细介绍串口WiFi模块BLE蓝牙模块WiFi蓝牙组合模块科普介绍作为无线模块研发厂家,SKYLAB为物联网市场研发推出了多款品质级WiFi模块蓝牙模块及WiFi蓝牙组合模块。为快速协助工程师的无线模块选型,本篇SKYLAB小编就来为大家做个简单
巨细!小姐姐告诉你关于BeautifulSoup的一切(续)作者潮汐来源Python技术详细了解BeautifulSoup爬虫前面第一篇文章是关于BeautifulSoup爬虫的基础知识详解第一部分,主要介绍了BeautifulSoup爬虫CDALevelI数据分析认证考试模拟题库(三)嗨喽,各位同学又到了公布CDA数据分析师认证考试LevelI的模拟试题时间了,今天给大家带来的是模拟试题(一)中的1115题。不过,在出题前,要公布上一期LevelI中610题的答这下女友总算满意了作者極光来源Python技术上次跟女友介绍了正则表达式的基本语法,以及在Python中如何使用。结果她还不满意,说传说中的正则表达式就这么简单?当然不是,今天就来跟大家一起介绍下正天使轮获得1200万的无染是怎么打造爆款纸巾的用户深层需求的不断发掘与满足,造就了细分新市场的不断发展壮大。就在刚刚结束的618年中电商消费盛宴上,竹纤维领域的纸巾品牌无染在各大合作精品电商平台,获得共计超千万的销售佳绩。以黑商务出行舒心高效神州专车接送机服务获青睐对商务人士来说,打飞的出差是家常便饭,因打车难打车效率低而耽搁行程的情况也并不少见。这一大环境下,神州专车推出的接送机服务,充分满足了商务人士高效舒适出行的需求,受到后者的广泛青睐一招让三姑六婆没空管你结没结婚,亲测有效想必很多人都经历过三姑六婆们的提问轰炸吧有小孩了吗结婚了吗有对象了吗怎么还不找对象呢一如行军布阵,层层推进再配上老爸老妈的日常催生或催婚简直是防不胜防所以在这里教大家一招可以暂时让小米8疯狂抢购,极致性价比逆天配置小米8周年,让利于用户!线上线下销售火爆小米董事长兼CEO雷军,为了庆祝小米8周年,推出了具有旗舰版性能的小米8,并于6月5日上午的10点准时开售,不得不提的是,开售现场异常火爆!开源高颜值基于MIT协议的SpringBoot主流技术栈开源社区系统一开源项目简介开源社区系统基于SpringBootMyBatisMySQLRedisKafkaElasticsearchSpringSecurity并提供详细的开发文档和配套教程。深度技术win7旗舰版如何安装网络打印机的方法很多深度技术的用户,电脑都使用win7旗舰版系统,它凭借良好的兼容性和稳定性,得到了众多的好口碑。当然,有小伙伴在办公的时候会用到打印机,那有网友就问深度系统小编win7旗舰版中要深度技术分享win7如何关闭uac功能的详细方法相信深度技术用户都知道什么是uac功能吧。它是一个很不错的系统保护功能,可以帮助我们阻止恶意程序损坏系统。但有深度windows7旗舰版系统的用户,说不需要该功能想要将其关闭,那w微信技术专家打造的开源IM系统,一键部署服务端,全平台支持文章首发于微信公众号GitHub黑板报,欢迎大家关注。打开微信,使用搜一搜,搜索GitHub黑板报,即可关注。大家好,我是章鱼猫。今天,推荐一个即时通讯系统项目,这个开源项目来自于