Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python静态方法和依赖注入_Python_Oop_Design Patterns - Fatal编程技术网

Python静态方法和依赖注入

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

有人能帮我解释一下为什么python上的staticmethod对依赖注入很有用吗

我看了这个很棒的视频,在45m45s上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

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

在这种情况下,客户端没有向
用户
提供输出方法,用户只有一个输出方法
GreetPrint
,客户端无法对其进行配置

与将输出注入构造函数相比,现在的设置方式看起来更难操作

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


用户应该负责输出自己吗?或者用户应该由外推杆执行操作?除了程序必须输出的用户之外,还有其他类型的对象吗