3

基本的に、変数を強制したいのですが、プラグインがロードされる前にjim、グローバルとしてロードしたプラグインに彼を呼び出すことができます。たとえば、次のようになります。

load_plugin('blah', variables={'jim':1}) #For instance

そして内部blah.py

print jim #prints 1

これを行う簡単な方法はありますか?標準ライブラリになければ大したことではありません。

4

2 に答える 2

2

いいえ -プラグインが最初にインポートされる前にそれを行う方法はありません - そのため、変数がモジュール本体自体で使用されている場合は運が悪いです。

変数がモジュールの関数またはメソッド (クラス本体ではない) 内でグローバル変数として使用されている場合は、モジュールをインポートした後に次のようにして変更できます。

import module
module.jim = 5

あなたがおそらく知っているように。(そして、これがあなたが求めているものではないことは承知しています)。

したがって、それを達成する唯一の方法は、モジュールのソース コードを解析し、そこで変数の割り当てを変更し、ソース コードを保存してインポートすることです。わかりました、メモリ内のソース コードでインポートをエミュレートする方法はありますが、このアプローチは非常に非現実的であるため、詳しく説明する必要はありません。

この方法でモンキー パッチを適用するモジュールのソースを制御できる場合は、モジュールが変数名を選択する構成ファイルを使用することをお勧めします。

次に、構成ファイルを生成し、インポートを実行します (まだ sys.modules にインポートされていないことに注意してください)。

于 2012-10-17T23:41:20.310 に答える
-1

__import__関数を使用できます。グローバルをオーバーライドできます。
例えば:

__import__('blah', dict(jim=1, **globals()))
于 2012-12-05T14:38:51.923 に答える