介绍
对于Java,依赖注入作为纯OOP工作,即,您提供要实现的接口,并且在框架代码中接受实现已定义接口的类的实例。
现在,对于Python,您可以以相同的方式进行操作,但是对于Python,我认为该方法的开销太大。那么,您将如何以Pythonic的方式实现它呢?
用例
说这是框架代码:
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(...)
题
问题很简短。有没有更好的常用Pythonic方法来做到这一点?也许有任何支持这种功能的库?
更新:具体情况
想象一下,我开发了一个微型Web框架,该框架使用令牌处理身份验证。该框架需要一个函数来提供ID
从令牌中获得的一些令牌,并获取与令牌相对应的用户ID
。
显然,框架对用户或任何其他特定于应用程序的逻辑一无所知,因此客户端代码必须将用户获取器功能注入框架中以使身份验证工作。
AttributeError
否则TypeError
将引发或),但是在其他方面相同。