Reference

Decorator

在python中,函数也是一个对象,通过打印函数对象的name就可以得到函数的name,例子如下:

def haha():
print('hello')

haha()
print(haha.__name__)

# 输出
hello
haha

什么是装饰器?我们明确了函数是一个对象后,我们就可以在其类中添加装饰函数。要增强haha()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改haha()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。下面是一个装饰器的定义:

def log(func): # 参数是一个ha
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper