python類裝飾器即__call__方法

上一篇中我對學習過程當中的裝飾器進行了總結和整理,這一節簡單整理下類裝飾器函數

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

#結果爲:
#我能夠對函數進行裝飾
#----------------------------
#測試一下可不能夠.
    
相關文章
相關標籤/搜索