Python静态方法与依赖注入

2024-10-01 11:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我看到了这个很棒的视频https://www.youtube.com/watch?v=E_kZDvwofHY,在45m45s上Thomas Wouters声称staticmethods对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中是这样)?你知道吗


Tags: selfoutput视频objectparamdefmsgdependency
1条回答
网友
1楼 · 发布于 2024-10-01 11:21:42

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

在您的示例中,所配置的依赖项似乎是output方法,在本例中是GreetPrint

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

在这种情况下,客户机没有为User提供输出方法,用户只有一个输出方法GreetPrint,客户机无法配置它。你知道吗

与将outputter注入构造函数相比,现在设置它的方式看起来要困难得多。你知道吗

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


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

相关问题 更多 >