修饰器(decorator)的作用:给被修饰的函数进行预处理。在函数前、后做特定操作。简单来说,装饰器就是实现了一个通用的功能,避在不同函数上反复写相同的代码。
def printStar(f):
def g():
print('1*'*20)
f()
print('2*'*20)
return g
@printStar
def boy():
print("I am a boy.")
@printStar
def girl():
print("I am a girl.")
if __name__ == "__main__":
boy()
girl()
以上是一个简单的修饰器函数printStar,做的动作:在f函数执行前打印20个1*,在函数执行后打印20个2*。然后boy函数和girl函数都使用了printStar修饰器。
打印内容如下:
1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*
I am a boy.
2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*
1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*
I am a girl.
2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*
———————————————————————————————————————————————————————————————————————————————
class myDecorator():
def __init__(self, fn):
print("修饰器类的__init__()函数")
self.fn = fn
def __call__(self):
self.fn()
print("修饰器的__call__()函数")
@myDecorator
def aFunction():
print("执行aFunction()函数")
print("aFunction()被类修饰器修饰")
aFunction()
以上是修饰器类,对应的输出如下:
修饰器类的__init__()函数
aFunction()被类修饰器修饰
执行aFunction()函数
修饰器的__call__()函数