python函数装饰器【新】

一、使用不带参数的函数装饰器装饰函数

    def decorator(func):
        def wrapper(*args, **kwargs):
            print("新增的功能")
            return func() #运行func函数,并返回func函数的返回参数,或者写作:ret=func() 
                                                                        # return ret
        return wrapper


    @decorator
    def my_func():
        print("我需要增加功能")

相当于:

my_func = decorator(my_func)

此时,运行my_func(),相当于运行decorator(my_func)的返回值wrapper()
如果你想运行其他函数也无所谓,只要通过decorator(my_func)返回
不过你应该返回一个函数,而不是一个可调用的类

二、使用带参数的函数装饰器装饰函数

    def outer(*args, **kwargs):
        def decorator(func):
            def wrapper(*args, **kwargs):
                print("新增的功能")
                return func()

            return wrapper

        return decorator


    @outer('参数')
    def my_func():
        print("我需要增加功能")

相当于:

my_func = outer('参数')(my_func)

此时,运行my_func(),相当于运行outer('参数')(my_func)的返回值wrapper()
outer('参数')的返回值为decorator,然后decorator(my_func)返回wrapper()

三、使用不带参数的函数装饰器装饰类

    def decorator(cls):
        print("新增的功能")

        return cls



    @decorator
    class MyClass:
        def __init__(self):
            pass

相当于:

MyClass = decorator(MyClass)

此时,运行my_func(),相当于运行decorator(MyClass)的返回值
所以decorator(MyClass)的返回值应该是一个类
要注意的是decorator()函数中的内容会在加载时运行

四、使用带参数的函数装饰器装饰类

    def outer(*args, **kwargs):
        def decorator(cls):
            print("新增的功能")

            return cls

        return decorator


    @outer('参数')
    class MyClass:
        def __init__(self):
            pass

相当于:

MyClass = outer('参数')(MyClass)

运行MyClass相当于运行decorator(cls)的返回值cls
outer()的返回值是一个可调用对象decorator,并且decorator的返回值是一个类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值