WEB开发网
开发学院软件开发Python 轻量级AOP框架-移植python的装饰器(Decorator)到C... 阅读

轻量级AOP框架-移植python的装饰器(Decorator)到C#(思考篇)

 2010-01-08 00:00:00 来源:WEB开发网   
核心提示: 执行改程序,可以得到如下的结果:回过头看看程序的特点,轻量级AOP框架-移植python的装饰器(Decorator)到C#(思考篇)(2),从源码可以了解到,Decorator的使用很简单,系统会顺序的进行前两步的动作,同时,直接放置在函数定义前即可,通过@xxx的方式放置

执行改程序,可以得到如下的结果:

轻量级AOP框架-移植python的装饰器(Decorator)到C#(思考篇)

回过头看看程序的特点,从源码可以了解到,Decorator的使用很简单,直接放置在函数定义前即可,通过@xxx的方式放置,系统就可以识别。下面我们研究下Decorator的一些特点。

1. Decorator的本质是一个函数,它可以有传入的参数,它需要返回一个函数对象(注意这儿两个函数的区别),因此,在程序中,名为 logger的Decorator返回了一个名为loggerWrapper的函数对象,同理,名为debugger的Decorator返回了一个名为 debuggerWrapper的函数对象,这是Decorator定义的第一要点:Decorator函数一定要返回一个函数对象。

2. Decorator返回的函数对象也是有要求的,因为这个返回的函数对象是系统在调用该函数的时候执行的,因此,系统调用该函数对象的时候会传入当前被装饰的函数对象(注意,这里可能并不是原始定义的函数对象),同时需要返回一个和被修饰的函数定义一致的函数供系统调用。对比代码中的定义,loggerWrapper函数接收一个fun的参数,很显然,该参数就是当前被修饰的函数对象,同时,它返回logging函数对象,该函数的定义和被修饰函数完全保持一致。

3. 系统在调用被修饰方法的时候,实际上是执行了第2点说明中返回的函数对象。也就是说,系统会对函数“偷梁换柱”,实际执行的并不是原来定义的函数体。至于原来定义的函数体是否会执行,那就要看Decorator的具体实现了。

4. 对于多个Decorator的情况,系统会顺序的进行前两步的动作,同时,系统对Decorator的处理是倒序的。

上一页  1 2 3 4  下一页

Tags:轻量级 AOP 框架

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接