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ですか?」)。ただし、が作成されると、これら 3 つのメソッドselfすべてに同じものが渡され、それは常に class であることに注意してください。したがって、親を見つけたいクラスを渡す必要があります。__init__fselfFinalsuper()

于 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 に答える