2009-08-26 7 views
2

私のプログラムGarlicSimで作業しています。ユーザーがシミュレーションを作成し、希望どおりに操作してファイルに保存することができます。Python:モジュールを酸洗する代わりに

私は最近、保存機能を実装しようとしました。私に起こった自然なことは、シミュレーション全体を含むProjectオブジェクトをピケッと拾うことです。

問題は、Projectオブジェクトにはモジュールも含まれています。これは「シミュレーションパッケージ」です。これは、シミュレーションを定義するいくつかの重要なオブジェクト、主に関数を含むパッケージ/モジュールです。私はシミュレーションと一緒にそれらを保存する必要がありますが、私はProjectオブジェクトをピケッとしようとした時に目撃し、例外が発生したので、モジュールをピケッとすることは不可能であるようです。

この制限を回避するにはどうすればよいでしょうか?

(私もシミュレーションパッケージは、プログラム内で動的にインポートされることに注意してください。)

答えて

1

あなたは私が動的に生成されていると推定シミュレーションパッケージモジュールのために元のコードをお持ちの場合は、その後、私はそれをシリアル化することをお勧めロードされたときにモジュールを再構築する。これはProject.__getstate__()Project.__setstate__()の方法で行います。

2

プロジェクトに何か必要なものが含まれているモジュールへの参照がある場合は、そのモジュールをモジュール内のクラスにリファクタリングしたいと思うかもしれません。とにかく、これはしばしばより良いことです。なぜなら、食べ物のためのモジュールの使用は、大脂肪の世界のにおいをするからです。私の経験では、このようなアプリケーション構造は問題につながるだけです。

(もちろん簡単な方法アウトがモジュールの辞書の代わりに、モジュール自体を保存することです。)

+0

あなたが意味し、代わりに動的にインポートされたモジュールへの参照を、内部で定義されたクラスへの参照にします動的にインポートされたモジュール? –

+0

はい。動的にモジュールをインポートするよりも、クラスを動的にインスタンス化するほうがきれいに見えます。 – djc

+0

それは面白いです。しかし、私はそれが少し問題だと思う。私のプログラムの仕組みは、ユーザーがインポートするシミュレーションパッケージを選択することです。すなわち、様々なタイプのシミュレーション(例えば、ニュートン物理学のためのもの、ゲーム理論のためのものなど)のためのあらかじめ書かれたシミュレーションパッケージがある。これらのあらかじめ書いたパッケージの中に一つのクラスを定義して、すべてのオブジェクトをそのクラスの属性にすることをお勧めしますか? –

関連する問題