python 什么叫裝飾器
用于調(diào)用另一個(gè)函數(shù)并返回結(jié)果
總結(jié):
1.類裝飾器用于普通用法時(shí), 用__call__
2.類裝飾器用于類用法時(shí), 用__get__, 因?yàn)槭褂妙愌b飾器后迈螟,在調(diào)用 func 函數(shù)的過(guò)程中其對(duì)應(yīng)的 instance 并不會(huì)傳遞給 __call__ 方法,造成其 mehtod unbound ,那么解決方法是什么呢痊班?描述符賽高使用類裝飾器后,在調(diào)用 func 函數(shù)的過(guò)程中其對(duì)應(yīng)的 instance 并不會(huì)傳遞給 __call__ 方法摹量,造成其 mehtod unbound ,那么解決方法是什么呢涤伐?描述符賽高使用類裝飾器后,在調(diào)用 func 函數(shù)的過(guò)程中其對(duì)應(yīng)的 instance 并不會(huì)傳遞給 __call__ 方法缨称,造成其 mehtod unbound ,那么解決方法是什么呢凝果?描述符賽高
3.函數(shù)裝飾器既可用于類函數(shù),也可用于普通函數(shù)睦尽。
代碼
類裝飾器用于類方法
import time
class TimeitClass:
def __init__(self, func):
self.func = func
def __get__(self, instance, owner):
start_time = time.time()
result = lambda *args, **kwargs: self.func(instance, *args, **kwargs)
elastic_time = time.time() - start_time
print(elastic_time)
return result
class T:
@TimeitClass
def t(self):
print("hugo boss")
# T().t()
類裝飾器用于普通方法
class Timeit:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
start_time = time.time()
result = self.func(*args, **kwargs)
elastic_time = time.time() - start_time
print(elastic_time)
return result
@Timeit
def t2():
print("t2")
# t2()
普通方法裝飾器
def timeit(func):
def _warp(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
elastic_time = time.time() - start_time
print(elastic_time)
return result
return _warp
@timeit
def t3():
print("t3")
class TestT3:
@timeit
def t4(self):
print("t4")
t3()
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者