装饰器

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

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__)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返...
    时间之友阅读 2,306评论 0 3
  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 1,370评论 0 3
  • 装饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法。 如果合理,可以直接将功能添加到对...
    英武阅读 5,177评论 1 50
  • 虽然人们能利用函数闭包(function clouser)写出简单的装饰器,但其可用范围常受限制。多数实现装饰器的...
    gomibako阅读 1,032评论 0 4
  • 昔日,石榴落红裳,枣花散芬芳, 葡萄架下,家禽觅食忙; 赏,牵牛花,守曙光, 紫茉莉,等月亮; 盼,墙头卧迎春,初...
    麦子舞穗阅读 218评论 0 0