python用類實現裝飾器

2022-05-29 03:42:16 字數 577 閱讀 6221

#

利用__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...