介绍
对于 Java,依赖注入作为纯 OOP 工作,即您提供要实现的接口,并在框架代码中接受实现定义的接口的类的实例。
现在对于 Python,您可以执行相同的操作,但我认为该方法对于 Python 而言开销太大。那么如何以 Pythonic 方式实现它呢?
Use Case
说这是框架代码:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
基本方法
最天真的(也许是最好的?)方法是要求将外部函数提供给FrameworkClass
构造函数,然后从do_the_job
method.
框架代码:
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(...)
Question
问题很短。有没有更好的常用 Pythonic 方法来做到这一点?或者也许有支持此类功能的库?
更新:具体情况
想象一下,我开发了一个微型 Web 框架,它使用令牌处理身份验证。这个框架需要一个函数来提供一些ID
从token中获取并获取对应的用户ID
.
显然,框架不了解有关用户或任何其他应用程序特定逻辑的任何信息,因此客户端代码必须将用户 getter 功能注入到框架中才能使身份验证工作。