2010-11-26 13 views
4

私はPythonモジュール(いくつかのライブラリで利用可能)を使う必要があります。モジュールは次のようになります。Pythonでモジュールの一部をインポートするには?

class A: 
    def f1(): 
    ... 

print "Done" 
... 

私は、しかし、私はモジュールをインポートし、下部のコード(プリントなど)実行されますが、クラスAの機能だけを必要としています。それを避ける方法はありますか?基本的に私はモジュールの一部をインポートする必要があります: "module1 import Aから" Aのみインポートする必要がありますか?

答えて

8

はい、確か:

from module1 import A 

は、一般的な構文です。たとえば:

from datetime import timedelta 

下部のコードはそうのようにラップされることにより、インポート時に実行されているから保護されなければならない:

if __name__ == "__main__": 
    # Put code that should only run when the module 
    # is used as a stand-alone program, here. 
    # It will not run when the module is imported. 
+1

問題は既存のモジュールであり、下部のコードはあなたが言及したように保護されていません。 – amit

0

@unwind's answerに加えて、これを行うための通常の方法で保護することですモジュールは直接使用されている場合にのみ実行する必要があり、モジュール内のコード:

if __name__ == "__main__": 
    <code to only execute if module called directly> 

あなたが正常にモジュールをインポートすることができますこの方法。

+1

モジュールを制御できないので、このように見えないようにするには、あなたはSOLです。これを常に行う。 – SingleNegationElimination

2

あなたはprint文によってのみイライラしている場合は、この記事の1つのコメントで説明したように、あなたは、目に見えないどこかにコードの出力をリダイレクトすることができが:http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html

sys.stdout = open(os.devnull, 'w') 
# now doing the stuff you need 
... 

# but do not forget to come back! 
sys.stdout = sys.__stdout__ 

ドキュメント:http://docs.python.org/library/sys.html#sys.stdin

しかし、ファイルの変更や時間のかかるコードを無効にしたい場合、唯一のことは、別のファイルに必要なオブジェクトをコピーしてからインポートすることです(しかし、私はそれをお勧めしません)。