2017-06-12 16 views
1

私はfooクラスの派生クラスが多く、派生クラスの1つに基本クラスのオブジェクトをインスタンス化しようとしています。基本クラスのコンストラクタを一度だけ呼びたいと思います。私は以下のコードを実行しようとしていながら 私はランタイムエラーを取得しています:実行時エラー:RecursionError:Pythonオブジェクトを呼び出すときに最大再帰深度を超過しました

class foo(): 
    call_once = True 
    _Bar = None 
    _BaseClass = None 
    def __init__(self): 
      if (self.call_once): 
       self.call_once = False 
       self._Bar = bar() 
       self._BaseClass = _bar 

class bar(foo): 
    def __init__(self): 
      foo.__init__(self) 

bar1 = bar() 
+0

これは意味をなさない。 'foo'インスタンスを初期化していない点は何ですか?なぜ最初のものが特別なのですか?あなたがしていることは何でも、私はそれを行うより良い方法があることを保証します。 –

+0

より良い方法をお勧めします。私は何をしようとしているのかという質問を書いた。 –

+0

したがって 'foo()'は 'bar'型のオブジェクトをインスタンス化します。しかし、 'bar()'は 'foo()'の '__init__'メソッドを呼び出し、' foo() 'は' bar'型のオブジェクトをインスタンス化します。この結果、無限ループになります。再帰は 'if'ブロック内で行われるため、' if'文はここでは役に立ちません。 – MaxPowers

答えて

2

なcall_onceはクラス変数であるので、これは起こりますが、あなたはなcall_onceインスタンス変数にFalseを代入しています。これを修正するには、Falseを確認してfoo.call_onceに割り当ててください。

class foo(): 
    call_once = True 
    _Bar = None 
    _BaseClass = None 
    def __init__(self): 
      if (foo.call_once): 
       foo.call_once = False 
       self._Bar = bar() 
       self._BaseClass = _bar 
+0

Worked!私を助けてくれてありがとう。 –

関連する問題