次のようなケースを考えてみましょう。基本クラス A、クラス B は A を継承し、クラス C は B を継承します。初期化子で親クラス初期化子を呼び出す一般的な方法は何でしょうか。それでもまだ漠然としすぎている場合は、次のコードを参照してください。
class A(object):
def __init__(self):
print "Initialiser A was called"
class B(A):
def __init__(self):
super(B,self).__init__()
print "Initialiser B was called"
class C(B):
def __init__(self):
super(C,self).__init__()
print "Initialiser C was called"
c = C()
これが私が現在行っている方法です。しかし、まだ少し非汎用的すぎるようです。正しい型を手動で渡す必要があります。
さて、私はself.__class__
super() の最初の引数として使用しようとしましたが、明らかに機能しません。これを C の初期化子に配置すると、当然、B の初期化子が呼び出されます。B でも同じことを行うと、「self」は依然として C のインスタンスを指しているため、B の初期化子を再度呼び出すことになります (これは無限再帰で終わります)。
今のところダイヤモンドの継承について考える必要はありません。私はこの特定の問題を解決することに興味があるだけです。
ベストアンサー1
Python 3 には、次のように使用できる改良された super() が含まれています。
super().__init__(args)