2016-05-26 2 views
1

私は、次の達成したい、次のコードを、している: クラス」からの主な機能Pythonで継承した親クラスの変数にアクセスする方法は?

2)継承「クラスA」から「クラスB」を初期化する)私はOOP 1で初心者ですので、ご了承くださいB "の変数のいくつかの条件に依存し、"クラスB "内から"クラスD "を呼び出すことによる。

3)"クラスD "の呼び出し後に"クラスA "それを出す。

4)その後、「クラスB」に戻り、より多くの条件でコードを実行します。

`` `

class A(object): 
     def __init__(self): 
      super(A,self).__init__() 
      self.A_var = 0 
      print('Running A.__init__') 
    class B(A): 
     def __init__(self): 
      super(B,self).__init__() 
      #B.__init__(self) 

     def fun2(): 
      self.A_var += 5 
      #foo = D() 
      self.fun1 
      print('Running B.__init__') 
      print self.A_var   

      #A.__init__(self) 


    class D(B,A): 
     def __init__(self): 
      #super(A,grandfather).__init__() 
      #A.__init__(grandfather) 
      super(D,self).__init__() 
      #D.__init__(self) 
     def fun1(): 
      print('Running D.__init__') 
      self.A_var += 400 
      print self.A_var 


    if __name__ == '__main__': 
     b = B() 
     b.fun2 

` ``

私はあなたが何を理解していない内部の "クラスD"

+0

あなたの質問は何ですか? – barny

+0

@barny "self.A_var"を出力したいのですが、必要な出力が得られず、 "Running A .__ init__"という出力が出力されます。 –

答えて

0

から "self.A_var" の値を印刷したいです継承はです。 D のインスタンスは、AとBのインスタンスであるであり、AとBはインスタンスを継承しているためです。あなたがする必要があるのは、それぞれ__init__メソッドでsuper()に電話することです。何らかの理由であなたはDのものを完全に間違ったD.__init__に置き換えました。これは無限に繰り返されます。 super(D,self).__init__()を返す。

唯一の変更点は、B.fun2内のDの無意味なインスタンス化を削除することです。そこにself.fun1()と呼んでください。

+0

私はまだ "self.A_var"を出力するために必要な出力を得ていません。どうしたらいいのでしょうか?理解のおかげで、私はPythonのOOPの初心者です。 –

0

あなたが実行するよりも、内部の「クラスD」 から「self.A_var」の値を印刷したい場合:d.fun1() チェックアウトこの修正されたコード:このコードの出力を持つ

class A(object): 
    def __init__(self): 
     super(A, self).__init__() 
     self.A_var = 0 
     print('Running A.__init__') 


class B(A): 
    def __init__(self): 
     super(B, self).__init__() 

    def fun2(self): 
     self.A_var += 5 
     print ('Running B.__init__'), self.A_var 


class D(B): 
    def __init__(self): 
     super(D, self).__init__() 

    def fun1(self): 
     self.A_var += 400 
     print ('Running D.__init__'), self.A_var 


if __name__ == '__main__': 
    d = D() 
    d.fun2() 
    d.fun1() 

です
Running A.__init__ 
Running B.__init__ 5 
Running D.__init__ 405 
+0

条件に応じて、「クラスB」内、つまり「fun2」内から「クラスD」を呼び出す方法を教えてください。答えもありがとう。 –

+0

@RishabhGuptaクラスBのfun2関数でクラスDを呼び出した後に、あなたが何をしたいかをあなたの条件をクリアしてください。 RuntimeError:Pythonオブジェクトを呼び出すときに最大再帰深度を超えた –

+0

私によれば、これはプログラムの流れでなければなりません: 1)メインプログラムは、クラスB "クラスA"とそのすべての属性/変数を継承しなければなりません。 2) "クラスA"の変数の状態に応じて、 "クラスB"は "クラスA"と "クラスB"のすべての変数を持たなければならない "クラスD"を呼び出す必要があります 3)クラス "B"に戻る必要がありますので、クラスBの内部から "クラスD"に類似のクラスを呼び出すための条件を確認できます 私を助けてくれてありがとう。 –

関連する問題