全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python的多重继承的理解

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小时内与您取得联系。