私は科学的データ分析用のアプリケーションを作成していますが、循環インポートの問題を回避 (または対処) するためにコードを構造化する最良の方法は何か疑問に思っています。現在、OO と手続き型プログラミングを組み合わせて使用しています。
他の質問はこの問題に対処しますが、より抽象的な方法です。ここでは、より具体的なコンテキストで最適なソリューションを探しています。
データがリストおよび/または配列で構成されるクラスがContainer
定義されています。DataLib.py
すべてのメソッドとサポート機能を使用すると、DataLib.py
非常に大きくなります (〜 1000 行)。
さまざまな基準に従ってSelectionLib.py
データを「フィルタリング」する関数のみを含む2 番目のモジュール(〜 400 行) があります。これらの関数は新しいオブジェクト (フィルター処理されたデータを含む) をContainer
返すため、からインポートする必要があります。論理的には、これらの関数は「コンテナー」の「メソッド」であり、python 関数を使用して実装されているだけであることに注意してください。Container
SelectionLib.py
Container
DataLib.py
Container
ここで、複雑な分析をメソッド呼び出しの 1 つの関数で実行できるように、いくつかの高レベルのメソッドを追加したいと考えています。そして、「複雑な分析」とは、任意の数のContainer
メソッド呼び出し、ローカル関数 (DataLib.py で定義)、およびフィルター関数 (で定義)を意味しSelectionLib.py
ます。
したがって、問題は、フィルター関数を使用するDataLib.py
ためにインポートする必要があることですが、既にインポートしています。SelectionLib.py
SelectionLib.py
DataLib.py
私のハックな解決策は、 IPythonからrun -i ...を使用して2つのファイルを実行することであることを知っているので、大きな単一のファイルを持っているようなもので、循環インポートを避けます。しかし同時に、このスクリプトを GUI などに統合することは困難です。
この問題をどのように解決することをお勧めしますか:
純粋な OO と継承を使用し、オブジェクトを 3 つに分割します:
CoreContainer
->SelectionContainer
->HighLevelContainer
コードの再構築 (すべてを 1 つのファイルに?)
ある種のインポートの策略(インポートを最後に置く)
どんなフィードバックでも大歓迎です!