Python静态方法和依赖注入
有人能帮我解释一下为什么python上的staticmethod对依赖注入很有用吗 我看了这个很棒的视频,在45m45s上Thomas Wouters声称静态方法对DI有用,但我不明白为什么 在开始写这篇文章,并做了一些测试后,我想我明白了。 例如:Python静态方法和依赖注入,python,oop,design-patterns,Python,Oop,Design Patterns,有人能帮我解释一下为什么python上的staticmethod对依赖注入很有用吗 我看了这个很棒的视频,在45m45s上Thomas Wouters声称静态方法对DI有用,但我不明白为什么 在开始写这篇文章,并做了一些测试后,我想我明白了。 例如: class GreetPrint(object): def pp(self, param): print("Hello", param) class User(object): def __init__(s
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
在提供的示例中,用户
和输出方法GreetPrint
之间存在紧密耦合。想象一下,如果我们被要求改变User
的输出方式。与全局范围内浮动的打印依赖项紧密耦合。可以通过继承将不同的输出应用于用户,但随后开始开发一个大型继承图,并且
在这种情况下,客户端没有向用户
提供输出方法,用户只有一个输出方法GreetPrint
,客户端无法对其进行配置
与将输出注入构造函数相比,现在的设置方式看起来更难操作
依赖项注入可以通过编程到一个接口来建立,该接口可以消除目标对其依赖项的耦合。我觉得这种情况下的依赖性是输出方法
用户应该负责输出自己吗?或者用户应该由外推杆执行操作?除了程序必须输出的用户之外,还有其他类型的对象吗