Python装饰器的几种书写方式

Python装饰器的几种书写方式

python装饰器的几种使用方式,带参数,不带参数,闭包装饰器,以及类装饰器等

from functools import wraps import wrapt

class Authorparams(object):
    """带参数的类的装饰器"""

    def __init__(self, level):
        self.level = level

    def __call__(self, func):
        @wraps(func)
        def warpper(*args, **kwargs):
            print("在进入视图函数之前执行相应的代码")
            return func(*args, **kwargs)

        return warpper
class Authoritic(object):
    """不带参数类的装饰器"""

    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        return self.func(*args, **kwargs)
def funcAuthorit(func):
    """不带参数的闭包装饰器"""

    @wraps(func)
    def warpper(*args, **kwargs):
        func1 = func(*args, **kwargs)
        return func1

    return warpper
def funcAuthorparams(level):
    """带参数的闭包装饰器"""

    def functhor(func):
        def warpper(*args, **kwargs):
            print("在进入视图函数之前执行相应的代码")
            return func(*args, **kwargs)

        return warpper

    return functhor

不带参数的装饰器(闭包装饰器)优化版

@wrapt.decorator
def wrapper(warpped, instance, args, kwargs):
    print("在进入视图函数之前执行相应的代码")
    return warpped(*args, **kwargs)

带参数的装饰器(闭包装饰器)优化版

def logging(level):
    @wrapt.decorator
    def wrapper(wrapped, instance, args, kwargs):  # instance表明传入的对象的实例
        print("在进入视图函数之前执行相应的代码")
        return wrapped(*args, **kwargs)

    return wrapper
@Authorparams(level="debug")
def test():
    print("执行相应的功能代码")
if __name__ == '__main__': # 执行代码
    test()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值