本文摘自php中文网,作者藏色散人,侵删。

首先,什么是装饰器?
比较官方的解释是:
装饰器是用来管理和调用函数和类的一个可调用对象,也就是说分为函数装饰器和类装饰器
这个定义函数我自己通俗化了一点,不然更加看不懂,其实我还有一句更加概括的话,可以解释装饰器:
装饰器就是对被装饰的对象(函数、类)进行重构的,其可以在不改变原来对象的情况下调用对象时执行重构后的行为
这里你可能就糊涂了,看不懂
没关系我们慢慢来!!!
首先,装饰器的语法你肯定知道
1 2 3 4 5 6 7 8 |
|
那,看这段代码,你可能根据上面你有几个疑问:
一、decorator是什么意思?
二、这里重构的行为是什么?
三、整个装饰的行为或者说流程是怎么样的?
我们看上面那一段代码,很显然,说过装饰器就是一个可调用对象,这个没问题吧,在上面的装饰器它就是一个函数。
重构的行为是什么?
上面的一段代码的重构行为就是讲func的执行代码替换成了wrapper的执行代码,也就是说,代码的最终输入是 7 而不是 1。
其实上面的两个问题是废话,我们解决了第三个问题,自然而然的就理解了!
好了,在继续看之前我们记住一句话:
装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数
一定要仔细看这句话,理解加记忆!
在上面那一段代码中
装饰器是: decorator
返回的可调用对象是: wrapper
被装饰的对象是 :func
好了,你先在套这个你去看看这个这个函数的执行流程
当然,这时候你还会有一个疑问:
当调用func(3,4)的时候发生了什么?
此时:返回的可调用对象(wrapper)给了func,你也可以理解为现在的func的代码是
1 2 |
|
这时的func就完全不是自己本身定义的func的,它是不是在某种意义上算是被重构了!
到这里你是不是理解了什么是装饰器,应该是理解了!
不过我们还没有结束,因为我要让你彻底的了解什么是装饰器!
之前我们说过,不止有函数装饰器,还有类装饰器,那接下来我们就看看类装饰器是怎么工作的,我还是要把之前那段话贴在这里,你别忘了!
装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数
1 2 3 4 5 6 7 8 9 10 |
|
我们来一步步的分析一下,
首先,我们说装饰器只接受被装饰的对象做参数,也就是说此时有
1 2 3 4 5 6 7 8 9 10 |
|
接下来来点难的看看:
1 2 3 4 5 6 7 8 9 10 11 |
|
思考一下这个答案是什么?
能想出来就基本上理解了什么是装饰器了!
相关推荐:《Python教程》
以上就是python装饰器是什么的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python os.chroot() 方法定义以及作用详解(实例)
更多相关阅读请进入《Python》频道 >>

Python编程 从入门到实践 第2版
python入门书籍,非常畅销,超高好评,python官方公认好书。