2017-06-21 5 views
0

でメソッドにアクセスすることはできません:「!」は、スーパークラス

class A(object): 
    def a_method(self): 
     print "A!" 

class B(A): 
    def b_method(self): 
     super(A, self).a_method() 
     print "B!" 

b_obj = B() 

私はプリントアウトするには、以下の期待しますと "B!"が表示されますが、エラーが発生します:

b_obj = B() 

AttributeError: 'super' object has no attribute 'a_method' 

私は困惑しています。私は何が欠けていますか?

class B(A): 
    def b_method(self): 
     super(B, self).a_method() 
    #  ^

答えて

1

あなたが望んでいたので:

super(B, self).a_method() 

は、そうでなければ、あなたがmroにAを飛ばします

+0

super(type[, object-or-type])

Return a proxy object that delegates method calls to a parent or sibling class of type.

これは正しいコードです。ありがとう。 – PProteus

1

あなたがいないスーパークラス、スーパーに現在のクラスを渡す必要があります。

他のすべてはOKです。

1

super(A, self)の代わりにsuper(B, self)を実行する必要があります。 Aのスーパークラスではなく、Bのスーパークラスにアクセスする必要があります。

1

現在のクラスをsuperに渡す必要があります。 the official super documentationから:あなたも私が持っていた関連の質問に答えMROを参照するので、私は、正しいとあなたの答えをマークし

super(B, self).a_method() 
関連する問題