2016-09-06 1 views
1

別のレベルのモジュールからいくつかのクラスをインポートしようとしています。私はすべてのクラスを入力することができますが、私は私がしなければ動的に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 formatgetattr()__getattr__成功しませんでした。

この方法でインポートすることは不可能ですか、何か間違っていますか?

+0

これを行う必要がある場合は、間違った方法で問題を解決する可能性が高いと思います。あなたはデータとコードを混ぜ合わせています:通常、あなたの変数は何であるべきですか?動的であるべきではありません - どのように動的にインポートされた変数を使用しますか?辞書がよりよく適合するかもしれない。実際に何をしようとしていますか? – RemcoGerlich

+0

とにかく、 '..previous_level.module'をインポートしてから' getattr(module、classname) 'でクラスを取得することができます。モジュールは名前空間であり、辞書のように既に機能しています。 – RemcoGerlich

+0

ありがとう;)私は、ほとんどのモジュールをインポートする動的な方法を習得しようとしていますが、実際のスクリプトではありません。 – user5617880

答えて

0

エラーSyntaxError: import * only allowed at module levelは、関数内から*をインポートしようとすると発生します。これは質問からは見えませんが、元のコードは次のようsimethingれたようです:有効になり、モジュールの先頭でインポートし、一方

def func(): 
    from ..previous_level.module import * # SyntaxError 

from ..previous_level.module import *  # OK 

こと

from myapp.previous_level.module import ClassA, ClassB, ClassC 

x = ClassA() 

# or: 

import myapp.previous_level.module 

x = myapp.previous_level.module.ClassA() 

ところで、これは完全に間違っている:

私はまだ *せずに絶対の輸入を使用することをお勧めし、言いました
+0

インポートのリストが非常に長いと仮定して、すべてのクラスをリストするのは賢明ではないでしょう。サブモジュールのインポートがより良い選択肢かもしれません。すなわち、 'from myapp.previous_level import module' –

+0

@zvone説明のためにありがとう、主要なバグは関数の中からインポートしています。しかし、 'for cycle'を使って関数を呼び出す方法はありますか? – user5617880

+0

@ M.Tモジュールを最初にインポートしようとしましたが、 'module import *'から取得しましたが、同じ 'SyntaxError:' ...もっとヒント?ありがとう;) – user5617880

関連する問題