モジュールオブジェクトを、import
を使用するのではなく、クラスまたはオブジェクトに渡すのが悪い考えではないかもしれないと思っていました。Python - 'import'またはモジュールをパラメータとして渡しますか?
なぜ私はこれがひどい/恐ろしいアイデアではないのかを説明できるかもしれないと思っていますか?
モジュールオブジェクトを、import
を使用するのではなく、クラスまたはオブジェクトに渡すのが悪い考えではないかもしれないと思っていました。Python - 'import'またはモジュールをパラメータとして渡しますか?
なぜ私はこれがひどい/恐ろしいアイデアではないのかを説明できるかもしれないと思っていますか?
あなたの話は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
私はそれが輸入品を取り除くことがちょっと「間違っている」と感じていたと思っていた – Magnus
:通常の(非テスト)ユースケースについては
は、デフォルト引数値を使用することができますあなたが使いたいもので私はこれまでに遭遇したあらゆる状況において、必要なモジュールは特定であるため、import
を使用することが望ましいでしょう。
それは依存性注入のようであり、実際には良いアイデアも好きです。しかし、1つまたは2つの関数/クラスではなく、モジュール全体がどれくらいの頻度で必要ですか? – delnan