私はPython 3で "インポートフック"を実装しようとしています。フックはインポートされるすべてのクラスに属性を追加することになっています。 (そうでもないすべてのクラスが、問題を単純化のために、のはそうと仮定しましょう。)Python 3のインポートフック
私のように定義されたローダーを持って、次のとおりです。
import sys
class ConfigurableImports(object):
def find_module(self, fullname, path):
return self
def create_module(self, spec):
# ???
def exec_module(self, module):
# ???
sys.meta_path = [ConfigurableImports()]
ドキュメントはローダー、3.6のようということを述べてcreate_module
とexec_module
の両方を実装する必要があります。しかし、ドキュメントには、これらを実装するために何をすべきか、また例は何も示されていません。 Pythonモジュールをロードするだけなので、私のユースケースは非常に簡単です。ローダーの振る舞いは、デフォルトの振る舞いとほぼ同じです。
私は、私はちょうどimportlib.import_module
を使用し、それに応じてモジュールの内容を変更したいことができれば、しかし、importlibはインポートフックを利用するので、無限の再帰を得ます。
EDIT:imp
モジュールのload_module
も試してみましたが、これは推奨されていません。
インポートフックでこの機能を実装する方法は簡単ですか、それとも間違った方法ですか?
を取得する必要がある場合
だから、あなたはそれを呼び出すことができます私はここで興味深い例が見つかりました:のhttp://chimera.labs.oreilly.com/books/1230000000393/ch10.html#_solution_179 – Tom
私の読書exec_moduleとcreate_moduleを実装する必要はありませんが、exec_moduleだけを実装することはできません。それはどちらかまたは両方です。 Create_moduleはNoneを返します –