5

考虑一个模块,例如some_module,不同的模块在同一个解释器进程中使用。这个模块将有一个单一的上下文。为了使some_module方法工作,它必须接收类实例的依赖注入。

将依赖项注入模块的pythonic和优雅的方式是什么?

4

3 回答 3

3

使用全局模块。

import some_module
some_module.classinstance = MyClass()

some_module如果未收到默认实例,则可以使用代码设置默认实例,或者仅设置classinstanceNone并检查以确保在调用方法时已设置它。

于 2011-06-24T15:18:04.333 回答
2

恕我直言,完全成熟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 回答