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

时间:2012-04-28 17:00:36

标签: python inheritance initialization

我有一个具有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”不能打印?

2 个答案:

答案 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()