python基础(06)——装饰器
来源:互联网 发布:淘宝拍摄 编辑:程序博客网 时间:2024/06/10 04:52
# 第一步:基本函数def lashi(): print('这是一个基本函数')#调用函数:lashi()# 第二步:扩展功能(不能直接修改原来的函数)#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi #扩展功能1 print('这是扩展1') #原有函数功能 var()#var调用基本函数lashi #扩展2 print('这是扩展2')#:基本函数def lashi(): print('这是一个基本函数')#调用函数kuozhan(lashi)#第三步:实现基本装饰器功能#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi #inner就是扩展之后的lashi函数 def inner(): #扩展功能1 print('这是扩展1') #原有函数功能 var()#var调用基本函数lashi #扩展2 print('这是扩展2') return inner# :基本函数def lashi(): print('这是一个基本函数')#因为装饰函数没有函数值,lashi接收的Nonelashi= kuozhan(lashi)print(lashi)#调用函数lashi()#第四步:语法糖方式实现lashi装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi #inner就是扩展之后的lashi函数 def inner(): #扩展功能1 print('这是扩展1') #原有函数功能 var()#var调用基本函数lashi #扩展2 print('这是扩展2') return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(): print('这是一个基本函数')lashi()#第五部:带有参数de函数的装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi #inner就是扩展之后的lashi函数 def inner(a,b): #扩展功能1 print('这是扩展1') #原有函数功能 var(a,b)#var调用基本函数lashi #扩展2 print('这是扩展2') return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(a,b): print(a,'这是一个基本函数',b)lashi(a='***',b='%%%')#带有返回值的函数def kuozhan(var):#var接收基本函数lashi #inner就是扩展之后的lashi函数 def inner(a,b): #扩展功能1 print('这是扩展1') #原有函数功能 res = var(a,b)#var调用基本函数lashi #扩展2 print('这是扩展2') return res return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(a,b): print(a,'这是一个基本函数',b) return '定得多练'result = lashi(a='***',b='%%%')print(result)# 第六步:带有收集参数的函数的装饰器#定义用于扩展函数的函数def kuozhan(var):#var接收基本函数lashi #inner就是扩展之后的lashi函数 def inner(*a,**b): #扩展功能1 print('这是扩展1') #原有函数功能 var(*a,**b)#var调用基本函数lashi #扩展2 print('这是扩展2') return inner# :基本函数@kuozhan##语法糖 相当于lashi = kuozhan(lashi)def lashi(*a,**b): print(a,'这是一个基本函数',b)lashi('***',nn = '&&&&')#第七步:带有参数的装饰器def outer(arg): # 定义用于扩展函数的函数 def kuozhan(var): # var接收基本函数lashi # inner就是扩展之后的lashi函数 def inner(): # 扩展功能1 if arg == 0: print('这是扩展1') elif arg == 1: print('llll') # 原有函数功能 var() # var调用基本函数lashi # 扩展2 if arg == 0: print('这是扩展2') elif arg == 1: print('llllllll') return inner return kuozhan@outer(0)# :基本函数def lashi(): print('这是一个基本函数')lashi()#第八步:使用类作为装饰器的参数class Shi: #装饰 def aaaa(): print('装饰') def bbbb(): print('装饰')def outer(arg):#接收类Shi #定义装饰器 def kuozhan(var):#接收基本函数lashi def inner(): #接收类的装饰aaaa arg.aaaa() var()#调用基本函数lashi #接收类的装饰bbbb arg.bbbb() return inner return kuozhan@outer(Shi) #基本函数def lashi(): print('这是一个基本函数')lashi()#第九步:使用类作为装饰器# 装饰器(类)class Decor: # 初始化方法 def __init__(self, arg): # Outer self.arg = arg # 添加call魔术方法 def __call__(self, func): # zhuangshi # 将func参数存入对象使得其他方法可以调用 self.func = func # 返回未来的拉屎函数 return self.inner # 声明内部函数 def inner(self): # inner # 扩展功能1 print('拉屎之前,沐浴更衣') # 拉屎函数 self.func() # 扩展功能2 print('拉屎之后,焚香祭祖')@Decor('aa') # 相当于 @对象 -》@装饰器def lashi(): print('辣妹子拉,拉妹子辣~~')lashi()#第十步:为类添加装饰器#装饰器def kuozhan(cls):#接收类 #未来的HUman类的结果 def inner(): #扩展功能 print('装饰') #inner的结果也是对象 var = cls() #扩展功能 print('装饰') #返回被装饰的内容的结果 return var #返回未来的函数(inner) return inner@kuozhanclass Human: pass#实例化对象result = Human()#类的调用结果为对象print(result)#第十一步:装饰器的嵌套#装饰器1def zhuangshi2(func): #定义内部函数 def inner(): #扩展功能1 print('壮汉死') #调用函数 func() #扩展功能2 print('壮汉死') #返回内部函数 return inner#装饰器2def zhuangshi1(func): #定义内部函数 def inner(): #扩展功能 print('装饰') #调用函数 func() #扩展功能 print('装饰') #返回inner return inner@zhuangshi2@zhuangshi1def lashi(): print('这是基本函数')lashi()Python学习交流、资源共享群:563626388 QQ
阅读全文