对模块的依赖注入

时间:2011-06-24 13:18:06

标签: python dependency-injection python-module

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

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

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:2)

使用全球模块。

import some_module
some_module.classinstance = MyClass()
如果没有收到默认实例,

some_module可以设置代码来设置默认实例,或者只需将classinstance设置为None并检查以确保在调用方法时设置它。

答案 2 :(得分:0)

您可以使用dependencies package来实现目标。