1.什么是装饰器?
装饰器也是一种函数,不过是一种用来修饰函数的函数。
2.为什么需要装饰器?
为了写更少的代码,更清晰的逻辑层次,例如我们现在要做一个电商网站,我们要在用户查看订单,购物,付款这三个场景都想要检查用户信息是否正确,而检查信息这一步骤在这三个场景都是做一样的事情,这时候我们就能把这个步骤给抽出来,变成一个装饰器,用的时候直接装饰某个函数就行(本人觉得抽出来做一个函数,然后把他放在想要用的函数里面没什么不同,只是一个在外面,一个在里面而已,装饰器看起来也比较吊把)。
3.怎么写?
有2种情况,一种是装饰器不带参数,一种是装饰器带参数,下面我直接给出2种写法,照葫芦画瓢就行。
class myreq():
pass
#不带参数
def myd(func):
def check(req):
if(req.name != "root" or req.password != "123456"):
raise Exception
else:
print("hello")
func(req)
return check
#带参数
def myd2(num):
def der(func):
def check(req):
if (req.name != "root" or req.password != "123456"):
raise Exception
else:
print("hello:{0}".format(num))
func(req)
return check
return der
@myd
def mf(req):
print("I am {0},password {1}".format(req.name,req.password))
@myd2(2)
def mf2(req):
print("I am {0},password {1}".format(req.name,req.password))
if __name__ == '__main__':
req = myreq()
req.name = "root"
req.password = "123456"
mf2(req)