成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python AOP正確實現方法介紹

開發 后端
Python AOP的實現方法其實比較簡單,我們在這里將會通過一段代碼的解讀來為大家詳細分析一下這一操作的每一步驟,方便大家學習。

如何正確有效率的實現Python AOP來為我們的程序開發起到一些幫助呢?首先我們要使用metaclass來對這一技術應用進行實現。那么具體的操作步驟將會在這里為大家呈上,希望可以給大家帶來些幫助。

其實Python這類非常動態的語言要實現AOP是很容易的,所以首先我們要來先定義一個metaclass

然后我們要在__new__()這個metaclass 的時候動態植入方法到要調用地方法的前后。

具體Python AOP的實現代碼如下:

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

使用的時候,如果我們要攔截一個類A的方法調用,就這樣子:

  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() 

這樣子在執行代碼的時候就得到了如下結果

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

以上就是我們對Python AOP的相關內容的介紹。

【編輯推薦】

  1. Python解釋器正確調用方式簡介
  2. windows service運行Python相關操作技巧分享
  3. Python開發環境相關搭建方法介紹
  4. Python下劃線在實際應用中功能體現
  5. 常用Python應用技巧內容分析
責任編輯:曹凱 來源: 博客園
相關推薦

2010-03-04 15:12:33

Python算法

2010-02-25 16:52:12

引用WCF服務

2010-03-03 17:10:57

Python操作Sql

2010-01-26 17:18:13

Android讀寫文件

2010-01-14 17:52:54

VB.NET顯示系統信

2010-02-26 11:22:16

LitwareHR使用

2010-03-05 16:51:01

Python程序轉為E

2010-02-25 09:13:34

WCF異步調用

2010-02-25 13:48:23

WCF動態創建代碼

2010-01-22 13:08:50

VB.NET創建數組

2010-02-26 08:59:10

WCF服務宿主程序

2010-01-26 17:36:17

Android實現全屏

2009-12-29 18:09:00

Silverlight

2010-02-25 10:10:29

WCF使用Header

2009-12-03 11:11:57

PHP網站優化

2010-02-24 10:07:48

WCF跨越邊界

2009-12-11 17:52:21

PHP獲取博客數據

2010-02-24 13:48:44

MSMQ使用WCF

2010-06-09 09:34:11

2009-12-07 18:42:55

PHP與Javascr
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品美女在线观看 | 观看av | 国产精品久久久久久妇女6080 | 国产在线一区二区三区 | 91精品一区二区三区久久久久久 | 97精品国产97久久久久久免费 | 嫩呦国产一区二区三区av | 久久久一区二区三区四区 | 中文字幕在线不卡播放 | 在线一区视频 | caoporn免费在线视频 | 日韩一区二区在线播放 | 亚洲一区二区三区四区五区中文 | 国产精品久久久久久久午夜片 | 日本一二区视频 | 亚洲视频在线免费观看 | 精品国产乱码久久久久久图片 | 欧美日韩国产一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 亚洲高清视频在线观看 | 欧美一区二区三区电影 | 日本成人中文字幕 | 国产精品视频网 | 青青草综合| 热久久久久| www.日韩| 日韩精品一区二区三区高清免费 | 欧美电影在线 | 亚洲视频一区 | 天天综合91| 亚洲成人第一页 | 黄色在线观看网址 | 久久精品一区二 | 91免费在线 | 国产欧美日韩久久久 | 不卡av电影在线播放 | 在线观看国产视频 | 中文字幕视频在线 | www国产成人免费观看视频,深夜成人网 | 国产一区精品 | 亚洲在线视频 |