python的多重继承的理解

Python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。
对经典类和新式类来说,属性的查找顺序是不同的。现在我们分别看一下经典类和新式类两种不同的表现:
经典类:
#! /usr/bin/python # -*- coding:utf-8 -*- class P1(): def foo(self): print 'p1-foo' class P2(): def foo(self): print 'p2-foo' def bar(self): print 'p2-bar' class C1(P1,P2): pass class C2(P1,P2): def bar(self): print 'C2-bar' class D(C1,C2): pass if __name__ =='__main__': d=D() d.foo() d.bar()
执行的结果:
p1-foo p2-bar
将代码实例,画了一个图,方便理解:
从上面经典类的输出结果来看,
实例d调用foo()时,搜索顺序是 D => C1 => P1,
实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2
总结:经典类的搜索方式是按照“从左至右,深度优先”的方式去查找属性。d先查找自身是否有foo方法,没有则查找最近的父类C1里是否有该方法,如果没有则继续向上查找,直到在P1中找到该方法,查找结束。
新式类:
#! /usr/bin/python # -*- coding:utf-8 -*- class P1(object): def foo(self): print 'p1-foo' class P2(object): def foo(self): print 'p2-foo' def bar(self): print 'p2-bar' class C1(P1,P2): pass class C2(P1,P2): def bar(self): print 'C2-bar' class D(C1,C2): pass if __name__ =='__main__': print D.__mro__ #只有新式类有__mro__属性,告诉查找顺序是怎样的 d=D() d.foo() d.bar()
执行的结果:
(<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.P1'>, <class '__main__.P2'>, <type 'object'>) p1-foo C2-bar
从上面新式类的输出结果来看,
实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1
实例d调用bar()时,搜索顺序是 D => C1 => C2
总结:新式类的搜索方式是采用“广度优先”的方式去查找属性。
以上就是Python的多重继承的详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# python的多重继承
# python的多重继承的详解
# python的多重继承理解
# Python类的多重继承问题深入分析
# 浅析Python中的多重继承
# 解决python super()调用多重继承函数的问题
# Python多重继承的方法解析执行顺序实例分析
# python多重继承实例
# 浅析python继承与多重继承
# Python类多重继承方式
# 一文了解Python 多重继承
# Python多重继承的使用小结
# 尤其是
# 多个
# 子类
# 如有
# 两种
# 它是
# 希望能
# 是怎样
# 如果没有
# 看一下
# 谢谢大家
# 画了
# 去到
# 到该
# 中找
# 类中
# 疑问请
# coding
# usr
# bin
相关文章:
如何通过.red域名打造高辨识度品牌网站?
如何生成腾讯云建站专用兑换码?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何在腾讯云免费申请建站?
网站制作壁纸教程视频,电脑壁纸网站?
定制建站哪家更专业可靠?推荐榜单揭晓
深圳网站制作的公司有哪些,dido官方网站?
如何选择CMS系统实现快速建站与SEO优化?
常州自助建站费用包含哪些项目?
网站制作网站,深圳做网站哪家比较好?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
,网页ppt怎么弄成自己的ppt?
制作网站外包平台,自动化接单网站有哪些?
如何在Windows服务器上快速搭建网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
c# 在高并发场景下,委托和接口调用的性能对比
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
魔方云NAT建站如何实现端口转发?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何高效生成建站之星成品网站源码?
学校建站服务器如何选型才能满足性能需求?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何快速生成凡客建站的专业级图册?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
Android自定义listview布局实现上拉加载下拉刷新功能
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
网站制作软件有哪些,制图软件有哪些?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
建站之星如何开启自定义404页面避免用户流失?
活动邀请函制作网站有哪些,活动邀请函文案?
建站之星如何修改网站生成路径?
制作网站怎么制作,*游戏网站怎么搭建?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何用PHP工具快速搭建高效网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
专业公司网站制作公司,用什么语言做企业网站比较好?
建站10G流量真的够用吗?如何应对访问高峰?
如何通过老薛主机一键快速建站?
小型网站制作HTML,*游戏网站怎么搭建?
*服务器网站为何频现安全漏洞?
如何快速辨别茅台真假?关键步骤解析
如何通过VPS搭建网站快速盈利?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站主机功能解析:服务器选择与快速搭建指南
如何在宝塔面板创建新站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。