使用類來寫裝飾器
阿新 • • 發佈:2018-04-07
mon main ext end cti wrap 計算 nbsp them
前兩天發現了裝飾器可以直接使用類來寫,分享一下,需要用類裏面的__call__方法,__call__方法就是可以把這個實例當成一個函數來調用,如果正常使用類裏面的方法的話,實例方法要先實例化類,然後才能調用,靜態方法、類方法則需要用類名或者實例化之後的對象來調用,而實例化之後的這個對象,是不能被調用的,__call__方法就是把這個實例變成一個可以調用的對象,也就是說實例化之後,這個對象就可以和一個普通函數一樣被調用。
示例代碼如下:
1 2 3 4 5 6 7 8 9 |
class Foo:
def __call__(self, *args, **kwargs): |
運行結果:
1 2 | >>>test.... #這個是調用test方法的時候輸出的 >>>call....#這個是執行調用這個實例化之後的方法輸出的 |
理解了上面的之後,就可以使用class來寫一個裝飾器了,計算程序的運行時間,當然思想和以前用函數寫裝飾器是一樣的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Fuck(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
import time
start_time = time.time()
res = self.func(*args, **kwargs)
end_time = time.time()
print(‘the function "%s" run time is %s‘ % (self.func.__name__, |
運行結果:
1 2 | >>>the function "run" run time is 1.0001001358032227#這個是裝飾器幫我們計算的函數運行時間 >>>sb_hyf#這個是正常運行run函數的時候,返回的值 |
使用類來寫裝飾器