Python静态方法和依赖注入
问题描述:
有人可以帮我解释为什么python上的静态方法对依赖注入有用吗?Python静态方法和依赖注入
我看到这个伟大的视频https://www.youtube.com/watch?v=E_kZDvwofHY和45分45秒Thomas Wouters声称静态方法对DI有用,但我不明白为什么。
...
开始写这篇文章后,并提出了一些测试,我想我得到了它。 一个例子:
class GreetPrint(object):
def pp(self, param):
print("Hello", param)
class User(object):
def __init__(self, param):
self.param = param
def print_user(self):
self.output(self.param)
@staticmethod
def output(msg):
return print_dependency.pp(msg)
print_dependency = GreetPrint()
a = User("Guido")
a.print_user()
这比通过构造注入一个较好的方法(至少在Python)?
答
依赖注入是客户端向调用者提供调用者需要的东西的地方。
在你例如它看起来像被配置的依赖是输出方法,在这种情况下GreetPrint
在提供的示例存在User
和输出方法GreetPrint
之间的紧密耦合。想象一下,如果我们被要求改变User
的输出方式。与在全局范围内浮动的打印依赖关系紧密耦合。不同的输出器可以通过继承应用于用户,但是随后一个大的继承图开始发展并且benefits of dependency injection and composition are lost。
在这种情况下,客户端不提供User
输出方法,用户只有一个输出方法GreetPrint
,并且它不能由客户端配置。
你现在设置的方式现在看起来比将输出注入到构造函数中要困难得多。
依赖注入可以通过编程到一个接口来建立,该接口消除目标对其依赖关系的耦合。我觉得这种情况下的依赖关系是输出方法。
用户是否应该负责输出自己?或者应该由外推者来操作用户?除程序必须输出的用户以外是否还有其他类型的对象?