上一篇中我對學習過程當中的裝飾器進行了總結和整理,這一節簡單整理下類裝飾器函數
1.類中的__call__方法:學習
咱們在定義好一個類後,實例化出一個對象,若是對這個對象以直接在後邊加括號的方式進行調用,程序就會報錯。也就是在類中這種作法是錯誤的;測試
而,若是一個類中寫入了__call__方法,當我問在對實例對象以括號的方式進行調用時,__call__方法中的語句就會被執行,代碼以下:spa
1 import time 2 # 定義一個Time類 3 class Time(object): 4 def __init__(self,a): 5 self.a = a 6 def __call__(self, *args, **kwargs): 7 print(self.a ) 8 # 對類進行實例化 9 now = time.ctime() 10 c = Time(now) 11 # 調用類中的call方法 12 c() 13 # 結果爲:Tue Jun 12 17:28:53 2018
2.類做爲裝飾器的底層原理和上一篇中所談到的是一致的,如下邊代碼爲示例:code
# 定義一個Time類 class Time(object): def __init__(self,func): # 注意這裏要設定參數接收Test self._func = func def __call__(self): print('我能夠對函數進行裝飾') print("----------------------------") self._func() @Time # 等價於 Test = Time(Test) def Test(): print('測試一下可不能夠.') Test() #結果爲: #我能夠對函數進行裝飾 #---------------------------- #測試一下可不能夠.