装饰器

作者: syp_xp | 来源:发表于2017-04-22 15:10 被阅读4次

    函数装饰器:通常用于插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计

    def use_logging(func):
        def wrapper(*args,**kwargs):
                print("logger is running")
                return func(*args)
        return wrapper
    
    @use_logging
    def foo():
        print("foo")
    
    @use_logging
    def bar():
        print("bar")
    
    
    if __name__ == '__main__':
        bar()
        foo()
    

    类装饰器:自动执行类中的call函数

    class Foo(object):
    
    def __init__(self,func):
    
        self._func = func
    
    def __call__(self):
    
        print("class decorator runing")
    
        self._func()
    
        print("ending")
    
    @Foo
    
    def bar():
    
        print("bar")
    
    if __name__ == '__main__':
    
        bar()
    

    functools.wraps:复现函数的元信息

    from functools import wraps
    
    def logged(func):
        @wraps(func)
        def with_logging(*args,**kwargs):
                print (func.__name__ + "was called")
                return func(*args,**kwargs)
        return with_logging
    
    @logged
    
    def f(x):
        """
        does some math
        """
        return x+x*x
    
    print (f.__name__)
    print (f.__doc__)

    相关文章

      网友评论

          本文标题:装饰器

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