#利用__call__方法,裝飾器的執行流程:當新增裝飾器語法糖時,會把語法糖的變數名加()執行,並將被裝飾的函式名傳入。所以當類加()執行時,執行了__init__,產生的物件就是被裝飾的函式,而物件()執行時觸發__call__,call方法下就能新增一些新的功能了
import
time
class
timeit:
def__init__
(self,func):
self.func=func
def__call__(self, *args, **kwargs):
start_time=time.time()
self.func(*args,**kwargs)
print('
run time is %s
'%(time.time()-start_time))
@timeit
deffunc():
time.sleep(3)
return
if__name__ == '
__main__':
func()
python裝飾器實現函式註冊和類裝飾器
01 一般情況下都是使用函式作為裝飾器,其實class也是可以的,function是callable物件,class只有重寫了 call 方法後,它的例項物件也就是callable物件了。02 裝飾器的巢狀 就乙個規律 巢狀的順序和 的順序是相反的。class functionmanager def...
Python 用裝飾器實現遞迴剪枝
求乙個共有10個台階的樓梯,從下走到上面,一次只能邁出1 3個台階,並且不能後退,有多少中方法?每次邁出都是 1 3 個台階,剩下就是 7 9 個台階 如果邁出1個台階,需要求出後面9個台階的走法 如果邁出2個台階,需要求出後面8個台階的走法 如果邁出3個台階,需要求出後面7個台階的走法 此3種方式...
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...