# 类装饰器
class Foo(object):
def __init__(self, func):
self._func = func
def __call__(self):
print ('class decorator runing')
self._func()
print ('class decorator ending')
@Foo
def bar():
print ('bar')
bar()
# 装饰器执行顺序
@a
@b
@c
def f ():
pass
# 执行顺序是从里到外,等效于f = a(b(c(f)))
例子:
#一个name对应一个方法
METHOD_MAP={}
def crawl_method(*name):
def wrapper(func):
for n in name:
METHOD_MAP[n]=func
def decorator(*args,**kwargs):
print('aab')
return func(*args,**kwargs)
return decorator
return wrapper
@crawl_method('sss','aaa')
def tes():
print('sss')
print(METHOD_MAP)
# 记录函数执行时间,报错日志的装饰器
import os
filename=os.path.basename(__file__)
def log(*text):#传参
def time_clock(func):#传func
def task_func(*args, **kwargs):#传func参
a1=time.time()
print(args[0])
try:
res = func(*args,**kwargs)
a2=time.time()
print(text[0],a2-a1)
return res #返回func的默认返回
except Exception as e:
print(filename,func.__name__,e)
return 0
return task_func
return time_clock
@log('clock')
def task(x):
# time.sleep('1')
time.sleep(1)
return 1
a=task('x')
print(a)