与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)
Non-intercept Example

非截距示例

现在,可能还有与此要求相关的各种其他问题- 记录,检查余额是否可用,通知用户 事务状态等。我们可以把所有这些逻辑都写在那里。 但是为了更好的模块化或者分离横切 关注点,我们遵循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)
Intercept Example

截距示例

已兑现的通知

该工具接受以下不言而喻的建议。before逻辑是 在之前在周围运行,在之前在周围运行 成功后after_exc可用于编写异常逻辑。 如果发生异常,之后的arou不会运行。

  • 之前
  • 大约在u之前
  • 离开后
  • 大约在u之后
  • 成功后
  • 最后

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList Java中的搜索字符串   另一个web应用程序的java访问会话   另一个应用程序中的活动和服务之间的java通信   java根据Json字符串类型将Json字符串转换为对象   eclipse如何解决java中的错误异常。lang.NoSuchMethodError:'java。字符串javax。摆动JOptionPane。showInputDialog(java.lang.String)'   线程“main”java中的安卓异常。lang.NoClassDefFoundError:org/codehaus/jackson/JsonParseException   java如何在安卓 emulator上显示Mat图像?使用NDK   Java在本地读取测试源文件,但在服务器上读取失败   java dowhile循环用于计算输入数字中的数字。故障排除代码   JAva初学者在编写获取成本的方法时遇到困难   java是shell游戏。我如何让物体移动,特别是在特定的曲线上,但顺序是随机的?   java如何区分两个同名的JButton   java为什么我在Spring Boot中需要一个接口?   java将文件路径插入数据库将删除\   使用InterfaceType初始化java对象   java如何部署一个分为Angular、Spring Boot和MySQL的项目?   java如何使用Symja解决不等式?