父级初始值设定项在多级继承中未被调用?
问题描述:
我有一个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()
您希望它找到其父项的类。
答
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
基类也应该调用'super()'。 – ch3ka 2012-04-28 17:06:22
琥珀 - 谢谢你,让perf的感觉 – Yarin 2012-04-28 17:08:28
ch3ka-是真的吗? – Yarin 2012-04-28 17:08:39