2009-05-02 8 views
0

現在、私は私の最初のPythonライブラリを記述しようとしていると私は、次のような問題が発生しました:Pythonの輸入は

私は私のパッケージmyapp.factoriesで、次のインポートを持っている:

from myapp.models import * 

そして、私のパッケージmyapp.modelsに次の

from myapp.factories import * 

私は私の工場パッケージでモデルを必要とするが、1つのモデルの内側に私はまた、工場の一つを必要とします。

NameError: global name 'MyModelFactory' is not defined 

私はそれはスクリプトが読み込まれる順序とは何かを持っているが、私は数字に見えることはできませんかなり確信している:私は今、私は次のエラーを取得する工場を必要とするコードを呼び出す場合これらの相互参照をどのように機能させるか「私も工場の一つ必要がある1つのモデル内の」

答えて

5

- ちょうどあなたがそれを必要とする工場というインポート:

class SomeModel: 
    def some_method(self): 
     from myapp.factories import SomeFactory 
     SomeFactory().do_something() 
+1

循環依存関係は、任意の言語や多くの非言語文脈で、ピットですが。この単純なリファクタリングは、この循環障害を取り除く1つの方法ですが、私はまた、全体のアーキテクチャのより幅広く深い再考をお勧めします - 循環デープは「悪いアーキテクチャの匂い」であり、大きな画像を再考するためのヒントとして、私見では。 –