2009-10-05 4 views
10

私はPythonを学んでいます。いつものように、私は自分のスタータープロジェクトに野心的です。私は、App Engine用のコミュニティサイトツールキット用のプラグインシステムに取り組んでいます。私のプラグインのスーパークラスにはinstall_pathというメソッドがあります。 self__module____path__を取得したいとします(この場合はサブクラスになります)。問題は、__module__はモジュールインスタンスではなくstrを返します。 eval()は信頼性が低く、望ましくないため、evalが含まれていない実際のモジュールインスタンスに手を差し伸べる良い方法が必要です。str私は__module__から戻ってきます。Pythonでクラスのモジュールインスタンスを取得するにはどうすればよいですか?

答えて

11

sys.modules辞書には、インポートしたすべてのモジュールを含んでいるので、あなたが使用することができます:あなたが望むすべてのモジュールのパスである場合

mod = sys.modules[__module__] 
1

どのように1) が明示的に現在のネームスペース内の変数 に割り当て)文字列としてモジュール名を渡し、 2差import Xような程度Importing modules

X = __import__(‘X’)作品。

モジュール名(「X」ではなく)を渡して、モジュールインスタンスを戻すことができます。 Pythonは、同じモジュールを2回インポートしないようにします。そのため、以前にインポートしたインスタンスを元に戻す必要があります。

+0

これはうまくいくようです。私はちょっときれいな解決策を望んでいますが、他に何も来なければそれを受け入れます。 –

+0

'__import __( 'foo.bar')'を実行すると、 'foo.bar'ではなく' foo'モジュールが返されることに注意してください。詳細については、 '__import__'ドキュメントを参照してください。 –

+0

Lukasのソリューションがはるかに優れている理由はいくつかあります。 –

関連する問題