2017.3.24更新:
** 用@wraps(func)
保存元信息**
在创建装饰器的时候,一定要注意保存元信息。
在装饰器里面注解包装函数,参数为原函数
def decorator(func):
from functools import wraps
# 下面为重要的
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
return result
return wrapper
@wraps(func)
还有一个重要的特点:可以让你通过__wrapped__
再次访问原函数。func.__wrapped__(*args,**kwargs)
下面需要注意:
- 如果有多个装饰器同时用上述方法装饰某个函数,则
__wrapped__
得到的结果不可预知。也可能是原函数,或解除一个装饰器效果。 - 内置的装饰器
@staticmethod
和@classmethod
就没有遵循这个约定 (它们把原始函数存储在属性__func__
中)。
原稿如下:
装饰器实质是把要装饰的对象当作一个参数传入,然后执行装饰这个函数
简单装饰器
带参数的装饰器
装饰器装饰类
类装饰器
http://blog.csdn.net/dreamcoding/article/details/8611578
http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000
http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
https://www.zhihu.com/question/26930016
http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html