Python装饰器

作者: 戏之地 | 来源:发表于2016-12-22 18:03 被阅读21次

    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装饰器

        本文链接:https://www.haomeiwen.com/subject/pbdhvttx.html