#不传参数的装饰器
新建一个py文件,写一个下面的方法
def myadd(func):
def wrapper(self,a,b,msg=None):#wrapper()里也可以不用参数
print("a")
func(self,a,b,msg=None)
print("b")
return wrapper
新建一个测试的py文件
class Test:
def test(Self,f,g,msg=None):
if(f==g):
print("c")
if__name__=='__main__':
tr =Test()
tr.test(1,1)
执行结果:
a
c
b
新建一个py文件,写一个下面的方法
def myadd(func):
def wrapper(self):
print("a")
func(self)
print("b")
return wrapper
新建一个测试的py文件
class Test:
def test(Self):
print("c")
if__name__=='__main__':
tr =Test()
tr.test()
执行结果:
a
c
b
#带有不定参数的装饰器
import time
def deco(func):
def wrapper(*args, **kwargs):
startTime = time.time()
func(*args, **kwargs)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
return wrapper
#多个装饰器
import time
def deco01(func):
def wrapper(*args, **kwargs):
print("this is deco01")
startTime = time.time()
func(*args, **kwargs)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
print("deco01 end here")
return wrapper
def deco02(func):
def wrapper(*args, **kwargs):
print("this is deco02")
func(*args, **kwargs)
print("deco02 end here")
return wrapper
@deco01
@deco02
def func(a,b):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b))
if __name__ == '__main__':
f = func
f(3,4)
#func()
执行结果:
this is deco01
this is deco02
hello,here is a func for add :
result is 7
deco02 end here
time is 1003 ms
deco01 end here
#定义带参数的装饰器
def myaddwithparams(item):
def test01(func):
def wrapper(self,*args,**kwargs):
print("装饰器“)
print("参数 %s" % item)
fun = func(self,*args,**kwargs)
return fun
return wrapper
return test01
#使用
class Test:
@myaddwithparams("aaa")
def test01(self):
print("我是一个函数")
if __name__ == '__main__':
tr = Test()
tr.test01()
执行结果:
装饰器
参数:aa
我是一个函数