たとえばsome_module
、さまざまなモジュールが同じインタプリタプロセスで使用するモジュールについて考えてみます。このモジュールには単一のコンテキストがあります。メソッドが機能するためにsome_module
は、クラスインスタンスの依存性注入を受け取る必要があります。
モジュールに依存関係を注入するためのPythonのようなエレガントな方法は何でしょうか?
たとえばsome_module
、さまざまなモジュールが同じインタプリタプロセスで使用するモジュールについて考えてみます。このモジュールには単一のコンテキストがあります。メソッドが機能するためにsome_module
は、クラスインスタンスの依存性注入を受け取る必要があります。
モジュールに依存関係を注入するためのPythonのようなエレガントな方法は何でしょうか?
モジュール グローバルを使用します。
import some_module
some_module.classinstance = MyClass()
some_module
受信していない場合にデフォルトのインスタンスを設定するコードを含めるか、単に設定classinstance
してNone
、メソッドが呼び出されたときに設定されていることを確認するコードを含めることができます。
すべての専門用語で本格的なIMHoの意見Dependency Injection
は、Javaのような静的に型付けされた言語により適しています。Pythonでは、非常に簡単にそれを達成できます。たとえば、ここにベアボーンがありますinjection
class DefaultLogger(object):
def log(self, line):
print line
_features = {
'logger': DefaultLogger
}
def set_feature(name, feature):
_features[name] = feature
def get_feature(name):
return _features[name]()
class Whatever(object):
def dosomething(self):
feature = get_feature('logger')
for i in range(5):
feature.log("task %s"%i)
if __name__ == "__main__":
class MyLogger(object):
def log(sef, line):
print "Cool",line
set_feature('logger', MyLogger)
Whatever().dosomething()
出力:
Cool task 0
Cool task 1
Cool task 2
Cool task 3
Cool task 4
何かが足りないと思われる場合は、簡単に追加できます。その python.
dependencies
パッケージを使用して、目標を達成できます。