面向侧面的程序设计方法(Aspect Oriented Programming, AOP)是面向对象技术之后流行起来的一种程序设计技术,目的是从模块的侧面对模块的运行进行监督、统计、权限检查异常处理等工作。AOP主要是高级软件工程师在进行系统软件、框架、平台的开发时使用。
假设需要对程序员编写的每一个函数进行跟踪,看看哪些函数被调用了,调用时的参数和返回值分别是什么。要实现这个功能有两个方法:第一,让程序员在他/她写的每个函数里增加上述操作。显然这个方法相当麻烦,并且如果想要修改跟踪逻辑,则势必要更改所有代码。第二,采用Python的装饰器,下面是个例子:
装饰器应用示例
def trace(func):
def _func(*args, **kwargs):
result = func(*args, **kwargs)
print('call %s(%s, %s): %s' % (func.__name__, args, kwargs, result))
return result
return _func
@trace
def add(a, b):
return a+b
@trace
def mul(a, b):
return a * b
if __name__ == '__main__':
add(3, 5)
add(5, 7)
mul(7, 9)
mul(9, 11)