2012-03-13 13 views
19

モジュールオブジェクトを、importを使用するのではなく、クラスまたはオブジェクトに渡すのが悪い考えではないかもしれないと思っていました。Python - 'import'またはモジュールをパラメータとして渡しますか?

なぜ私はこれがひどい/恐ろしいアイデアではないのかを説明できるかもしれないと思っていますか?

+0

それは依存性注入のようであり、実際には良いアイデアも好きです。しかし、1つまたは2つの関数/クラスではなく、モジュール全体がどれくらいの頻度で必要ですか? – delnan

答えて

23

あなたの話はdependency injectionと呼ばれ、コードをテスト可能にするための良い習慣と考えられています。私はそれがPythonとは違っているとは思っていません。

はあなたが合格フラグのいくつかの種類に応じて異なるモジュールをインポートすることによって、たとえば、Pythonでそれを行うことができ、他の方法があります。

class Foo(object): 
    def __init__(self, testing=False): 
     if testing: 
      import module_test as module 
     else: 
      import module 
     self.module = module 

しかし、モジュールへの参照を渡すことは、あなたが使用したいれますより柔軟性があり、懸念がよりよく分離され、使用したいクラスまたはインスタンス(または文字列または整数)への参照を渡すよりもPythonに劣らずです。問題のクラスは、いくつかの異なるモジュールのいずれかを使用することができる場合、それが通過することに意味を作ることができ、

class Foo(object): 
    def __init__(self, module=None): 
     if not module: 
      import module 
     self.module = module 
+0

私はそれが輸入品を取り除くことがちょっと「間違っている」と感じていたと思っていた – Magnus

3

:通常の(非テスト)ユースケースについては

は、デフォルト引数値を使用することができますあなたが使いたいもので

私はこれまでに遭遇したあらゆる状況において、必要なモジュールは特定であるため、importを使用することが望ましいでしょう。

関連する問題