2017-11-11 5 views
0

申し訳ありませんが、これは愚かな質問ですが、私には非常に混乱している可能性があります。私は子供に親メソッドにアクセスしていますグランドチャイルドクラスの祖父母メソッドを呼び出す

class A(): 
def say(self): 
    print("A") 

class B(A): 
def say(self): 
    print("B") 

class C(B): 
def say(self,*args, **kwargs): 
    return super(C, self).say(*args, **kwargs) 

、それはB印刷しますが、私たちは、クラスBからのアクセスを得ているように、クラスAからメソッドにアクセスしたい:我々は次のクラスを持っているとしましょう。

私はsuperをクラスBに追加できますが、クラスBは変更したくありません。どのようにしてAから直接Cクラスのメソッドを取得するオプションがありますか?

このような A.say(self)を呼び出すことによってすることができます
+0

Aクラス(Aクラス)のメソッドを直接呼び出すことができます。 )メソッドを使用します。 –

+4

@ PeterMajkoあなたはそれを行うためにAのインスタンスが必要です。 Sanjay - なぜあなたはそのようなことをしたいのですか?一方では継承を使用していますが、他方ではそれを壊そうとしています。あなたがそれをやろうとしているのではなく、あなたが達成したいものを投稿してください。あなたの目標を達成するより良い方法があるかもしれない – alfasin

+2

クラスCでは、あなたのsay()メソッドは 'super(B、self)、say()'によってAにアクセスできます。 –

答えて

0

class A(): 
    def say(self): 
     print("A") 

class B(A): 
    def say(self): 
     print("B") 

class C(B): 
    def say(self): 
     A.say(self) 
     B.say(self) 
     print("C") 

次に端末からそれをテストするために:

>>> a = A() 
>>> a.say() 
A 
>>> b = B() 
>>> b.say() 
B 
>>> c = C() 
>>> c.say() 
A 
B 
C 

注:ABクラスはdidnのため、私はargskwargsを落としましたそれらの引数を使用しないでください。 sayに電話をかける場合は、A.say(self, *args, **kwargs)としてください。A.sayが返すものもあれば、返品することもできます

+0

これはもっと一般的なアプローチとして考えられます:super(super(self .__ class __、self)、self).say(* args、** kwargs) –

関連する問題