![]() |
1
14
这完全取决于形势。例如,如果您将依赖注入用于测试目的——这样您就可以轻松地模拟出一些东西——您通常可以完全放弃注入:您可以模拟出您将要注入的模块或类:
如果在更复杂的情况下使用依赖注入,或者当模拟整个模块或类不合适时(例如,因为您只想模拟一个特定的调用),那么通常选择使用类属性或模块全局作为依赖项。例如,考虑
您可以很容易地替换
当使用这样的类属性时,考虑到选项,这是很少必要的,您应该注意使用
最后,只有简单的回调;如果您只想将类的特定实例绑定到特定的服务,可以将服务(或服务的一个或多个方法)传递给类初始值设定项,并让它使用:
当设置这样的实例属性时,您不必担心描述符触发,因此只需分配函数(或类、其他可调用文件或实例)就可以了。 |
![]() |
2
1
这个“只设定”的注射配方怎么样? http://code.activestate.com/recipes/413268/
它是相当的蟒蛇,使用“描述符”协议
|
![]() |
3
0
我最近发布了一个针对Python的DI框架,它可能会对您有所帮助。我认为这是一个相当新鲜的看法,但我不确定它是如何“蟒蛇”。自己判断。欢迎反馈。 |
![]() |
4
0
@托马斯·沃特斯的回答是完整的。另外:通常我更喜欢最简单的方法,那些不涉及复杂框架和冗长设置的方法。所以我使用最多的是将依赖项作为构造函数参数。 问题在于,我添加到代码中的样板文件只是为了确保初始化每个依赖项。 作为装饰师的狂热粉丝,为了从函数的作用域中删除样板代码,我做了一个装饰师来处理: @autowired 一个python 3装饰器,用于实现简单、干净的依赖项注入:
装饰师的重点是 这样的代码 :
在这个问题上 :
没有复杂的东西,没有设置,没有强制执行的工作流。现在您的函数代码不再与依赖项初始化代码混在一起了。 装饰方法是非常简单的,但它可能是一个完整的框架更适合你的情况。因为有很多优秀的模块,比如 Injector . |