Python静态方法和依赖注入

时间:2017-04-01 16:37:52

标签: python oop design-patterns

有人可以帮我解释为什么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中)?

1 个答案:

答案 0 :(得分:0)

依赖注入是客户端向调用者提供调用者需要的东西的地方。

在您的示例中,看起来配置的依赖项是输出方法,在本例中为GreetPrint

在提供的示例中,User和输出方法GreetPrint之间存在紧密耦合。想象一下,如果我们被要求改变输出User的方式。与全局范围中浮动的打印依赖关系紧密耦合。可以通过继承将不同的输出器应用于用户,但随后开始开发大型继承图和benefits of dependency injection and composition are lost

在这种情况下,客户端没有为User提供输出方法,用户只有一个输出方法GreetPrint,并且客户端无法配置它。

现在设置它的方式看起来比将输出器注入构造函数要困难得多。

依赖注入可以通过编程到接口来建立,该接口消除目标在其依赖性上的耦合。在这种情况下,我觉得依赖于输出方法。

用户是否应负责输出自己?或者是否应该由推出者对用户采取行动?除程序必须输出的用户外还有其他类型的对象吗?