设为首页 加入收藏

TOP

兄弟连学Python 装饰器和抽象类(一)
2017-12-14 14:32:34 】 浏览:399
Tags:兄弟 连学 Python 装饰 抽象
#装饰器:对类或者函数进行功能的扩展
''' #第一步:基本函数 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la() la() #第二步:扩展函数功能(不能修改原函数) #用于扩展基本函数的函数 def kuozhan(func): #扩展功能1 print('la前参拜祈求') #调用基本函数 func() #扩展功能2 print('la后还愿感谢') #基本函数 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了) la = kuozhan(la) print(la) #调用函数 #la() #la() #第三步:使用语法糖(就是语法) @语法 #用于扩展基本函数的函数 def kuozhan(func): #扩展功能1 print('la前参拜祈求') #调用基本函数 func() #扩展功能2 print('la后还愿感谢') #基本函数 @kuozhan #la = kuozhan(la)#扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了) def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') print(la) #调用函数 #la() #la() #第四步:基本装饰器的实现 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的la函数) def newla(): #扩展功能1 print('la前参拜祈求') #调用基本函数 func() #扩展功能2 print('la后还愿感谢') #添加返回值 return newla #基本函数 @kuozhan #la = kuozhan(la)#扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了) def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #print(la) #调用函数 la() la() #第五步:带有参数的装饰器和带有返回值的装饰器 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的la函数) def newla(shui,na): #扩展功能1 print('la前参拜祈求') #调用基本函数 func(shui,na) #扩展功能2 print('la后还愿感谢') #添加返回值 return newla #基本函数 @kuozhan #la = kuozhan(la)#扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了) def la(who,where): print(who,'在',where,'tuokuzi') print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #print(la) #调用函数 la('yangjun','羊圈') la('yanfei','鸟巢') #带有返回值的函数 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的la函数) def newla(): #扩展功能1 print('la前参拜祈求') #调用基本函数 result = func() #扩展功能2 print('la后还愿感谢') #为newla添加返回值 return result #添加返回值(装饰器用于返回未来的la函数的return) return newla #基本函数 @kuozhan #la = kuozhan(la)#扩展之后的函数要重新赋值给基本函数!(但是此步骤还实现不了) def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') return '热翔' #print(la) #调用函数 result = la() print('函数的返回值为:',result) #第六步:带有收集参数的函数的装饰器 def kuozhan(func): #定义内部函数 def newla(*w,**n): #扩展功能1 print('la前参拜祈求') #调用基本函数 func(*w,**n) #扩展功能2 print('la后还愿感谢') #返回未来的la函数 return newla #基本函数 @kuozhan def la(*who,**nums): print('参与la的人有',who) print('la了多少',nums) print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la('xuyu','wangcheng','xiufeng','zhangbo',xy = '15斤',wc = '15吨',xf = '15克',zb = '15ml') #第七步:带有参数的装饰器 #装饰器 def outer(arg): #这是装饰器代码 def kuozhan(func): #print(func) #未来的la函数 def newla(): # 扩展功能1 print('la前参拜祈求') # 调用基本函数 func() # 扩展功能2 print('la后还愿感谢') #未来的chifan函数 def newchifan(): #扩展功能1 print('饭前洗洗手') #调用基本函数 func() #扩展功能2: print('饭后抖一抖') #根据装饰的函数不同 返回不同的结果 if arg == 'la': #返回的未来的la函数 return newla elif arg == 'chi': return newchifan #返回装饰器 return kuozhan #基本函数1 @outer('la')#@装饰器函数 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #基本函数2 @outer('chi') def chifan(): print('eat meat') #调用基本函数 la() chifan() #第八步:使用类作为装饰器参数 #装饰器使用的操作类 class Wish: #祈求方法 def before(): print('la前参拜祈求') #还愿方法 def after(): print('la后还愿感谢') def outer(cls): #装饰器函数 def kuozhan(func): def newla(): #扩展1(类中存在扩展内容) cls.before() #调用基本函数 func() #扩展2(类中存在扩展内容) cls.after() return newla return kuozhan #基本参数 @outer(Wish)#装饰器 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la() #第九步:使用类作为装饰器 class Kuozhan: #接受装饰器函数(函数outer) def __init__(self,arg): #此处可以将参数存入对象 self.arg = arg #制作一个内部函数(真正的装饰器 函数kuozhan) def __call__(self,func): #print(func) #将func函数存入对象 self.func = func #返回内部函数 return self.newla #定义内部函数 def newla(self): #扩展功能1 print('la前参拜') #调用基本函数 self.func() #扩展功能2 print('la后还愿') #基本函数 @Kuozhan('la') #la = 对象(la) def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la() #第十步:
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇py基础之无序列表 下一篇兄弟连学Python 错误和异常处理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目