python装饰器class_python的装饰器

捋了一遍又一遍,终于对装饰器有了一点点的认识

基本的装饰器长这样:

defadd_news(func):def new_func(*args, **kwargs):print("这是新添加的内容")return func(*args, **kwargs)return new_func

@add_news

def my_func():

print("----something-----")

if __name__ == "__main__":

my_func()

#解释器解释时,基本装饰器实际是这样执行的:

#my_func = add_news(my_func)

#my_func 此时指向 new_func 函数

#调用 my_func() 前,解释器是会直接执行以上部分的!!!!

#my_func() 相当于 new_func()

高级一点的装饰器长这样:

1 defadd_news(arg):2 print(arg)3 defnew_dec(func):4 def new_func(*args, **kwargs):5 print("这是需要添加的内容")6 return func(*args, **kwargs)7 returnnew_func8 returnnew_dec9

10 @add_news("sixsam")11 def my_func(name="tom"):12 print("your name is {}".format(name))

#相当于:

#my_func = add_news("sixsam").(my_func)

#add_news("sixsam") ,返回了 new_dec

#new_dec(my_func) ,返回了 new_func

#注意,解释器解释到有装饰器的时候,以上部分是会直接执行的

#最后,调用 my_func() 时,

#相当于执行了 new_func()

然后,下面这个代码,就说的通了,之前一直不明白

def log(func=None):defwrapper(fun):def inner(*args, **kwargs):print('new thing')

func(*args, **kwargs)print("another something")return

returninnerif func isNone:returnwrapperelifcallable(func):returnwrapper(func)

@logdefmy_func_1():print("func_1")

@log()defmy_func_2():print("func_2")#这个装饰器,使用时,即使加上了括号,也不会报错了,两个用法一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值