別のレベルのモジュールからいくつかのクラスをインポートしようとしています。私はすべてのクラスを入力することができますが、私は私がしなければ動的にpython import *または他のレベルのリスト
それをやろうとしている」:myappのフォルダから
from ..previous_level.module import *
raise: SyntaxError: import * only allowed at module level
同じ:
from myapp.previous_level.module import *
raise: SyntaxError: import * only allowed at module level
は、だから私は考えた:
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
from ..previous_level.module import i
raise: ImportError: cannot import name 'i'
および
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
__import__('myapp').previous_level.module.y
raise: AttributeError: module 'myapp.previous_level.module' has no attribute 'y'
私は試しましたstring format
、getattr()
、__getattr__
成功しませんでした。
この方法でインポートすることは不可能ですか、何か間違っていますか?
これを行う必要がある場合は、間違った方法で問題を解決する可能性が高いと思います。あなたはデータとコードを混ぜ合わせています:通常、あなたの変数は何であるべきですか?動的であるべきではありません - どのように動的にインポートされた変数を使用しますか?辞書がよりよく適合するかもしれない。実際に何をしようとしていますか? – RemcoGerlich
とにかく、 '..previous_level.module'をインポートしてから' getattr(module、classname) 'でクラスを取得することができます。モジュールは名前空間であり、辞書のように既に機能しています。 – RemcoGerlich
ありがとう;)私は、ほとんどのモジュールをインポートする動的な方法を習得しようとしていますが、実際のスクリプトではありません。 – user5617880