父级初始值设定项在多级继承中未被调用?

问题描述:

我有一个2级继承的课程方案。我的期望是,每个类构造函数都会贯穿始终 - 但中级类构造函数似乎从未受到影响。这里缺少什么?父级初始值设定项在多级继承中未被调用?

class Base(object): 
    def __init__(self): 
     print "BASE" 

class Next(Base): 
    def __init__(self): 
     super(Base, self).__init__() 
     print "NEXT" 

class Final(Next): 
    def __init__(self): 
     super(Next, self).__init__()  
     print "FINAL" 

f = Final() 

输出:

BASE
FINAL

为什么 “NEXT” 不打印?

您应该致电super()当前类,而不是父级。

class Base(object): 
    def __init__(self): 
     super(Base, self).__init__() 
     print "BASE" 

class Next(Base): 
    def __init__(self): 
     super(Next, self).__init__() 
     print "NEXT" 

class Final(Next): 
    def __init__(self): 
     super(Final, self).__init__()  
     print "FINAL" 

f = Final() 

乍一看,这似乎是多余的(“为什么不能只是从self获取类?”) - 但请记住,同一self传递给所有这三种__init__方法时f被创建,并且self始终是类Final。因此,您必须通过super()您希望它找到其父项的类。

+0

基类也应该调用'super()'。 – ch3ka 2012-04-28 17:06:22

+0

琥珀 - 谢谢你,让perf的感觉 – Yarin 2012-04-28 17:08:28

+0

ch3ka-是真的吗? – Yarin 2012-04-28 17:08:39

class Base(object): 
    def __init__(self): 
     print "BASE" 

class Next(Base): 
    def __init__(self): 
     super(Next, self).__init__() 
     print "NEXT" 

class Final(Next): 
    def __init__(self): 
     super(Final, self).__init__()  
     print "FINAL" 

f = Final() 
+1

在class_name和super(class_name,self).__ init __...中都必须具有相同的claaname才能打印所有调用方法,但在Class Next(低音)中,超级(低音,自身)__init__ ..so“NEXT”未打印。 ....所以改变超(下一步,自我).__初始化__...然后o/p:BASE NEXT FINAL – 2012-09-17 11:48:02