2017-01-23 10 views
1

私が継承したPython(2.7)コードをいくつかクリーンアップしています。コードは現在(インポート関数を悪用して)実行されていますが、それは面倒で、他のコードが特定の方法でアクセスしないときに問題を引き起こします。パッケージの循環依存関係を避ける

ファイル構造は基本的にこれです:

/deep/nested/path/__init__.py 
/deep/nested/path/objects.py 
/deep/nested/path/api.py 

objects

apiが/取得objectsのインスタンスを作成するための機能で、開発者インターフェースを公開するデータモデルのコレクションです。

objectsの一部が子オブジェクトを作成する関数を呼び出す必要があるため、循環インポートが発生します。

このセクションでは解析を扱い、多くのオブジェクト(深い再帰)が実行されます。パッケージの名前空間もかなり入れ子になっています。そのため、パッケージのパスを使用すると、パフォーマンスに目に見える影響があります。

objectsが必要とするファクトリ関数をそのファイルに移動し、一般的な使用のためにapiにインポートし直したいと思っています。それは私の問題を解決して(そしてドットをなくす)、(実際にはまともな)コード構成の一部を失うでしょう。私はいくつかの入力を与えるために目の別のセットを期待しています。

ここでは循環輸入に関するいくつかの質問がありますが、これを機能させることには関心がありません。私はドット記法を最小化することに懸念しています。 api.factoryおよびobjects.fooが動作しますが、package.api.factoryは発生しません。

答えて

0

おそらく、これらのファクトリ関数を第3の モジュールに移動する方がよいでしょう。その後、objectsはオブジェクトを作成するためにインポートできます。 apiできます。 必要に応じてインポートします。他のモジュールは、 の内容が必要な場合にインポートできます。

関連する問題