0
呼び出すと、私は次のコードを持っている:多重継承でのスーパークラスメソッド
class A:
pass
class B(A):
def foo(self, a):
if a:
return 'B'
return super(B, self).foo(a)
class C:
def foo(self, a):
return 'C'
class D(B, C):
def foo(self, a):
return super().foo(a)
d = D()
print(d.foo(0))
私はMROに基づいd.foo(0)
を呼び出すと、それは最初B
クラスのfoo
メソッドを呼び出して、その内部に、条件が間違っている場合は、それをsuper(B, self).foo(0)
を返すが、クラスA
にはfooメソッドを持っていないし、私はこのエラーを期待しています:
AttributeError: 'super' object has no attribute 'foo'
が、それはクラスC
から'C'
を返します。どうして?
これは「スーパー」の全体的なポイントです。それについて考えてみましょう。親に直接電話するのであれば、その言語では「スーパー」は必要ないでしょう。ここで直接「A」と呼ぶことにします。 – wim