2

我有一个具有 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()

输出:

基础
决赛

为什么“NEXT”不打印?

4

2 回答 2

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始终属于 class Final。因此,您必须传递super()您希望它找到其父级的类。

于 2012-04-28T17:02:54.137 回答
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()
于 2012-09-17T11:27:40.483 回答