装饰器是一个函数,用来包装别的函数的函数,并返回一个修改之后的函数对象,将其重新赋值原来的标识符,原始函数对象是无法访问的。
内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。很少使用
当执行该方法时:先执行装饰器内部的代码然后执行返回的对象。
装饰器原理
def decorate(func):
print "start called func()!"
func()
def func_1():
print "This is func_1()"
decorate(func_1)
相当于
def decorate(func):
print "start called func()!"
return func
@decorate
def func_2():
print "This is func_2()"
func_2()
装饰的函数带有参数
def decorate(func):
def _decorate(*agrs, **kwagrs):
print "agrs:",agrs
print "kwagrs",kwagrs
func(*agrs, **kwagrs)
return _decorate
@decorate
def func(*agrs, **kwagres):
print "This is func()"
func(1,2,3,a=4,b=5,c=6)
装饰器带参数(需要再在外面包装一层函数)
def decorate(arg):
if arg == 0:
print "arg == 0"
def _decorate_0(func):
def __decorate_1(*agrs, **kwagrs):
print "agrs:",agrs
print "kwagrs",kwagrs
return __decorate_1
return _decorate_0
elif arg == 1:
print "arg == 1"
def _adecorate_1(func):
def __decorate_1(*agrs, **kwagrs):
print "agrs:",agrs
print "kwagrs",kwagrs
return __decorate_1
return _adecorate_1
@decorate(0)
def func_1(*agrs, **kwagres):
print "This is func_1()"
@decorate(1)
def func_2(*agrs, **kwagres):
print "This is func_1()"
func_1(1,2,3)
func_2(a=4,b=5,c=6)
内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。很少使用