python 什么叫装饰器
用于调用另一个函数并返回结果
总结:
1.类装饰器用于普通用法时, 用__call__
2.类装饰器用于类用法时, 用__get__, 因为使用类装饰器后,在调用 func 函数的过程中其对应的 instance 并不会传递给 __call__ 方法,造成其 mehtod unbound ,那么解决方法是什么呢?描述符赛高使用类装饰器后,在调用 func 函数的过程中其对应的 instance 并不会传递给 __call__ 方法,造成其 mehtod unbound ,那么解决方法是什么呢?描述符赛高使用类装饰器后,在调用 func 函数的过程中其对应的 instance 并不会传递给 __call__ 方法,造成其 mehtod unbound ,那么解决方法是什么呢?描述符赛高
3.函数装饰器既可用于类函数,也可用于普通函数。
代码
类装饰器用于类方法
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()