Python装饰器

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

你可能感兴趣的:(Python装饰器)