与aop概念相关的简单拦截器
SimpleInterceptor的Python项目详细描述
它是一个简单的工具,可以用来截取类的方法 对他们提出建议。
安装
pip install SimpleInterceptor
请注意,pip search SimpleInterceptor不返回任何内容。 或者,可以克隆或下载、提取和 可以运行以下命令
- install使用python setup.py install
- 使用python setup.py test 运行测试
示例
如果我们要实现一个银行事务逻辑,它可以简单到 就这样。
class BankTransaction(object): def transfer(self, amt): print "Transferring Rs. %d" % amt
交易也会简单地完成。
obj = BankTransaction() obj.transfer(1000)
非截距示例
现在,可能还有与此要求相关的各种其他问题- 记录,检查余额是否可用,通知用户 事务状态等。我们可以把所有这些逻辑都写在那里。 但是为了更好的模块化或者分离横切 关注点,我们遵循aop的原则并应用另一个 通过拦截核心方法关注(建议)。这个简单的库 是要这么做的。
假设上面的关注点就是这样实现的。
def start_transaction_log(*args, **kwargs): print "Starting transaction" def check_balance_available(*args, **kwargs): print "Balance check logic says Transaction allowed" def send_notification(*args, **kwargs): print "Transaction successful"
现在,为了将这些逻辑应用于transfer方法,我们将 需要创建一个方面并用 工具的interceptdecorator,如下所示。 我们可以使用任何正则表达式模式来匹配 方法名。这允许使用 同样的模式。
aspects = dict() aspects[r'transfer'] = dict( before=start_transaction_log, around_before=check_balance_available, after_success=send_notification) from interceptor import intercept BankTransaction = intercept(aspects)(BankTransaction) obj = BankTransaction() obj.transfer(1000)
截距示例
已兑现的通知
该工具接受以下不言而喻的建议。before逻辑是 在之前在周围运行,在之前在周围运行 成功后。after_exc可用于编写异常逻辑。 如果发生异常,之后的arou不会运行。
- 之前
- 大约在u之前
- 离开后
- 大约在u之后
- 成功后
- 最后