【python】继承问题-深度、广度优先

python super()
http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
这篇文章介绍了super的用法,我看了这段代码不懂:

class A(object):
  def __init__(self):
   print "enter A"
   print "leave A"

 class B(object):
  def __init__(self):
   print "enter B"
   print "leave B"

 class C(A):
  def __init__(self):
   print "enter C"
   super(C, self).__init__()
   print "leave C"

 class D(A):
  def __init__(self):
   print "enter D"
   super(D, self).__init__()
   print "leave D"
 class E(B, C):
  def __init__(self):
   print "enter E"
   B.__init__(self)
   C.__init__(self)
   print "leave E"

 class F(E, D):
  def __init__(self):
   print "enter F"
   E.__init__(self)
   D.__init__(self)
   print "leave F"

f = F() result:

 enter F
 enter E
 enter B
 leave B
 enter C
 enter D
 enter A
 leave A
 leave D
 leave C
 leave E
 enter D
 enter A
 leave A
 leave D
 leave F

为什么多了一层d
在输出的第六行为何多了enter d
和我想象的不一样:

C2{QYV~BBNDMBJ2W$29@9~T.jpg

文章里说,
mro中记录了一个类的所有基类的类类型序列。查看mro的记录,发觉包含7个元素,7个类名分别为:
F E B C D A object
“从而说明了为什么在C.init中使用super(C, self).init()会调用类D的初始化函数了。 ???”

代码改成:

class A(object):
  def __init__(self):
   print "enter A"
   super(A, self).__init__()  # new
   print "leave A"

 class B(object):
  def __init__(self):
   print "enter B"
   super(B, self).__init__()  # new
   print "leave B"

 class C(A):
  def __init__(self):
   print "enter C"
   super(C, self).__init__()
   print "leave C"

 class D(A):
  def __init__(self):
   print "enter D"
   super(D, self).__init__()
   print "leave D"
 class E(B, C):
  def __init__(self):
   print "enter E"
   super(E, self).__init__()  # change
   print "leave E"

 class F(E, D):
  def __init__(self):
   print "enter F"
   super(F, self).__init__()  # change
   print "leave F"

f= F():

 enter F
 enter E
 enter B
 enter C
 enter D
 enter A
 leave A
 leave D
 leave C
 leave B
 leave E
 leave F

看不懂也。

立个flag
需要搞懂的有:
经典类和新式类
MRO算法
多态继承
深度优先和广度优先

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python进阶-继承中的MRO与super @(Python)[python, python进阶] [TOC] ...
    理查德成阅读 5,454评论 2 10
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,822评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,929评论 18 399
  • 文/夏乔木子 总是畏惧很多事,觉得能做到这些事的都是特别厉害的人,了不起的人,也是我一辈子都不敢的事情! 刚刚兼职...
    夏乔木子阅读 2,994评论 0 0
  • 不知过了几天,我再次拾起写作的习惯,捡起简书,书写自己!我还是觉得自己是欠缺的,在感情方面还是太过于被动!为了未...
    宏远_3d6b阅读 1,033评论 0 0