__import__

     pythonでモジュールを追加する場合、普通import文を使います。
    例)test.pyを読み込む場合
        >>>import test


     しかしimport文に与える引数はモジュールである必要があります。つまり動的に作成された文字列などではエラーになってしまいます。
        >>>import 'test'
        File "", line 1
          import 'test'
                    ^
    

     この問題は組み込み関数__import__を使用すると解決できます。
        >>>__import__( 'test' )
     フルでの書式は
        >>>__import__( 'test', globals(), locals(), [], -1 )
     from test import funcのようにfrom文を使いたい場合は
        >>>__import__( 'test', globals(), locals(), ['func'], -1 )
    でいけます。



     組み込み関数__import__は、パッケージモジュールの下の層を読み込んだ際にトップレベルのモジュールが帰ってきてしまうと言う仕様になっているので注意が必要です。
        >>>__import__( 'test.sample' )
        
    



     これを展開した状態で返すようにするためには以下のような関数を書くといいそうです。
    def myImport( module ):
        mod = __import__( module )
        components = module.split( '.' )
        for c in components[1:]:
            mod = getattr( mod, c )
        return mod

        >>>myImport( 'test.sample' )
        
    ※2016年09月06日追記
    5行目の
        for c in components:
    の部分ですが、正しくは
        for c in components[1:]:
    でした。記載ミス、スイマセン(; ・`ω・´)

    import test as tのように別名にしたい場合は
        >>>t = myImport( 'test' )
    でOK。
    オブジェクト指向万歳\(^o^)/

    スポンサーサイト

    コメントの投稿

    非公開コメント

    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR