av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Python AOP正確實(shí)現(xiàn)方法介紹

如何正確有效率的實(shí)現(xiàn)Python AOP來為我們的程序開發(fā)起到一些幫助呢?首先我們要使用metaclass來對這一技術(shù)應(yīng)用進(jìn)行實(shí)現(xiàn)。那么具體的操作步驟將會(huì)在這里為大家呈上,希望可以給大家?guī)硇椭?/p>

10多年的佳木斯網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整佳木斯建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“佳木斯網(wǎng)站設(shè)計(jì)”,“佳木斯網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

其實(shí)Python這類非常動(dòng)態(tài)的語言要實(shí)現(xiàn)AOP是很容易的,所以首先我們要來先定義一個(gè)metaclass

然后我們要在__new__()這個(gè)metaclass 的時(shí)候動(dòng)態(tài)植入方法到要調(diào)用地方法的前后。

具體Python AOP的實(shí)現(xiàn)代碼如下:

 
 
 
  1. __author__="alex" 
  2. __date__ ="$2008-12-5 23:54:11$" 
  3. __name__="pyAOP" 
  4. '''  
  5. 這個(gè)metaclass是實(shí)現(xiàn)AOP的基礎(chǔ)  
  6. '''  
  7. class pyAOP(type):  
  8. '''  
  9. 這個(gè)空方法是用來將后面的beforeop和afterop初始化成函數(shù)引用  
  10. '''  
  11. def nop(self):  
  12. pass  
  13. '''  
  14. 下面這兩個(gè)變量是類變量,也就是存放我們要植入的兩個(gè)函數(shù)的地址的變量  
  15. '''  
  16. beforeop=nop 
  17. afterop=nop 
  18. '''  
  19. 設(shè)置前后兩個(gè)植入函數(shù)的類函數(shù)  
  20. '''  
  21. @classmethod  
  22. def setbefore(self,func):  
  23. pyAOP.beforeop=func 
  24. @classmethod  
  25. def setafter(self,func):  
  26. pyAOP.afterop=func 
  27. '''  
  28. 初始化metaclass的函數(shù),這個(gè)函數(shù)最重要的就是第四個(gè)參數(shù),
    dict通過這個(gè)參數(shù)我們可以修改類的屬性(方法)  
  29. '''  
  30. def __new__(mcl,name,bases,dict):  
  31. from types import FunctionType #加載類型模塊的FunctionType  
  32. obj=object() #定義一個(gè)空對象的變量  
  33. '''  
  34. 這個(gè)就是要植入的方法,func參數(shù)就是我們要調(diào)用的函數(shù)  
  35. '''  
  36. def AOP(func):  
  37. '''  
  38. 我們用這個(gè)函數(shù)來代替將要調(diào)用的函數(shù)  
  39. '''  
  40. def wrapper(*args, **kwds):  
  41. pyAOP.beforeop(obj) #調(diào)用前置函數(shù)  
  42. value = func(*args, **kwds) #調(diào)用本來要調(diào)用的函數(shù)  
  43. pyAOP.afterop(obj) #調(diào)用后置函數(shù)  
  44. return value #返回  
  45. return wrapper  
  46. #在類的成員列表中查找即將調(diào)用的函數(shù)  
  47. for attr, value in dict.iteritems():  
  48. if isinstance(value, FunctionType):  
  49. dict[attr] = AOP(value) #找到后用AOP這個(gè)函數(shù)替換之  
  50. obj=super(pyAOP, mcl).__new__(mcl, name, bases, dict)
     #調(diào)用父類的__new__()創(chuàng)建self  
  51. return obj 

使用的時(shí)候,如果我們要攔截一個(gè)類A的方法調(diào)用,就這樣子:

 
 
 
  1. class A(object):  
  2. __metaclass__ = pyaop 
  3. def foo(self):  
  4. total = 0 
  5. for i in range(100000):  
  6. totaltotal = total+1  
  7. print total  
  8. def foo2(self):  
  9. from time import sleep  
  10. total = 0 
  11. for i in range(100000):  
  12. totaltotal = total+1  
  13. sleep(0.0001)  
  14. print total 

最后我們只需要:

 
 
 
  1. def beforep(self):  
  2. print('before')  
  3. def afterp(self):  
  4. print('after')  
  5. if __name__ == "__main__":  
  6. pyAOP.setbefore(beforep)  
  7. pyAOP.setafter(afterp)  
  8. a=A()  
  9. a.foo()  
  10. a.foo2() 

這樣子在執(zhí)行代碼的時(shí)候就得到了如下結(jié)果

 
 
 
  1. before  
  2. 100000  
  3. after  
  4. before  
  5. 100000  
  6. after 

以上就是我們對Python AOP的相關(guān)內(nèi)容的介紹。

【編輯推薦】

  1. Python解釋器正確調(diào)用方式簡介
  2. windows service運(yùn)行Python相關(guān)操作技巧分享
  3. Python開發(fā)環(huán)境相關(guān)搭建方法介紹
  4. Python下劃線在實(shí)際應(yīng)用中功能體現(xiàn)
  5. 常用Python應(yīng)用技巧內(nèi)容分析

當(dāng)前文章:Python AOP正確實(shí)現(xiàn)方法介紹
文章URL:http://uogjgqi.cn/article/ccscsjh.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流