我有一个具有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”不能打印?
答案 0 :(得分:10)
您应该使用当前类调用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()
您想要它的类来查找。的父级。
答案 1 :(得分:1)
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()