5

たとえばsome_module、さまざまなモジュールが同じインタプリタプロセスで使用するモジュールについて考えてみます。このモジュールには単一のコンテキストがあります。メソッドが機能するためにsome_moduleは、クラスインスタンスの依存性注入を受け取る必要があります。

モジュールに依存関係を注入するためのPythonのようなエレガントな方法は何でしょうか?

4

3 に答える 3

3

モジュール グローバルを使用します。

import some_module
some_module.classinstance = MyClass()

some_module受信していない場合にデフォルトのインスタンスを設定するコードを含めるか、単に設定classinstanceしてNone、メソッドが呼び出されたときに設定されていることを確認するコードを含めることができます。

于 2011-06-24T15:18:04.333 に答える
2

すべての専門用語で本格的な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.

于 2011-06-24T14:51:49.337 に答える
0

dependenciesパッケージを使用して、目標を達成できます。

于 2016-10-09T21:22:42.830 に答える