python继承类经典算法

#! /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):...
    thebeeman阅读 412评论 0 0
  • 1.元类 1.1.1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这...
    TENG书阅读 1,295评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 线程 1.同步概念 1.多线程开发可能遇到的问题 同步不是一起的意思,是协同步调 假设两个线程t1和t2都要对nu...
    TENG书阅读 624评论 0 1
  • 昨夜西风扰我梦, 今朝困乏不想醒。 借问此时为几更, 窗外艳阳来相迎。
    肯尼迪金阅读 194评论 0 2