考虑一个模块,例如some_module
,各种模块在同一个解释器进程中使用。该模块将具有单个上下文。为了使some_module
方法起作用,它必须接收类实例的依赖注入。
将依赖注入模块的pythonic和优雅方法是什么?
答案 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来实现目标。