装饰器本质上就是一种函数
1.普通装饰器
def log(func):
def wrapper(*args, **kwargs):
print('this is a log')
return func(*args, **kwargs)
return wrapper
@log
def func():
print('I am a function')
func()
等价于log(func)()
2.带参数的装饰器
*args 元组类型
**kwargs 字典类型
def log(level):
def decorator(func):
def wrapper(*args, **kwargs):
if level == 'info':
print('I am info level log')
if level == 'error':
print('I am error level log')
return wrapper
return wrapper
@log (level='info')
def func1():
print('I am a function1')
@log (level='error')
def func2():
print('I am a function2')
func1()
func2()
3.类装饰器
def log(object):
def __init__(self, func):
self.func = func
def __call__(self):
print('this is a log')
self.func()
@log
def func():
print('I am a function')
func()