对于 Java 来说,依赖注入是纯面向对象的,也就是说,你提供了一个要实现的接口,并且在你的框架代码中接受了一个实现了已定义接口的类的实例。
现在,对于 Python,您可以使用同样的方法,但是我认为对于 Python,这种方法的开销太大了。那么如何以 Python 的方式实现它呢?
假设这是框架代码:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
最天真的(也许是最好的?)方法是要求将外部函数提供给 FrameworkClass
构造函数,然后从 do_the_job
方法调用该函数。
框架代码:
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
客户端代码:
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
问题很简短。有没有比 Python 更常用的方法来做到这一点?或者任何支持这种功能的库?
假设我开发了一个微型 web 框架,它使用令牌来处理身份验证。这个框架需要一个函数来提供从令牌获得的一些 ID
,并获得与该 ID
对应的用户。
显然,框架对用户或任何其他特定于应用程序的逻辑一无所知,因此客户机代码必须将用户 getter 功能注入到框架中,以使身份验证工作。