Python 模块依赖注入
考虑一个模块,例如不同模块在同一解释器过程中使用的某个模块。此模块将具有单个上下文。为了使Python 模块依赖注入,python,dependency-injection,python-module,Python,Dependency Injection,Python Module,考虑一个模块,例如不同模块在同一解释器过程中使用的某个模块。此模块将具有单个上下文。为了使某些\u模块方法能够工作,它必须接收类实例的依赖项注入 将依赖项注入模块的pythonic和优雅的方式是什么?我认为成熟的依赖项注入和所有行话都更适合静态类型语言,如Java,在python中,您可以非常容易地完成这一点。例如,这里是一个简单的注入 class DefaultLogger(object): def log(self, line): print line _features
某些\u模块
方法能够工作,它必须接收类实例的依赖项注入
将依赖项注入模块的pythonic和优雅的方式是什么?我认为成熟的
依赖项注入
和所有行话都更适合静态类型语言,如Java,在python中,您可以非常容易地完成这一点。例如,这里是一个简单的注入
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。使用全局模块
import some_module
some_module.classinstance = MyClass()
某些模块
可以使用代码来设置默认实例(如果未收到),或者只需将classinstance
设置为无
,并在调用方法时进行检查以确保其已设置。您可以使用来实现您的目标。这不是依赖项注入,而是一个服务定位器。@deamon可能是它没有,可能两者都是get\u功能('logger')
是服务定位器,但set\u功能在应用程序开始时注入MyLogger,这是差异之间的良好链接不幸的是,这是一个服务定位器。链接好像死了。@validname修复,谢谢!