了解内容
@staticmethod和@clasmethod的本质就是函数装饰器
staticmethod和classmethod都是Python内置的函数
函数装饰器的用法
使用@符号用已有的函数(比如@staticcmethod、@classmerhod)后,可用于修饰其他函数
函数装饰器的本质
当程序使用“@函数”(比如函数A)装饰另一寒素(比如函数B)时,实际上完成如下两步:
(1)将被修饰的函数(函数B)作为参数传给@符号引用的寒素(函数A)
(2)将函数B替换(装饰)成第1步的返回值。
#fo1函数,该函数将打算作为寒素装饰器使用
#作为函数装饰器使用的函数,它必须定义一个形参
def fo1(fn):
print("fo1函数")
print(fn)
return 'wk1'
#被装饰的函数
@fo1
def bar():
print('bar函数')
'''
函数装饰器的本质:
1)将被装饰器的函数(bar)作为参数传给装饰器函数(fo1)
2)被装饰的函数(bar)将被替代装成修饰器函数(fo1)的返回值
'''
print(bar)#bar被装饰一被替换成装饰器的返回值:wk1
#由于bar其实已经被替换成了wk1,因此bar函数不能被调用
bar()
成功的价值
#fo1函数,该函数将打算作为函数装饰器使用
#作为函数装饰器使用的函数,它必须定义一个形参
def fo1(fn):
print("fo1函数")
def nonename(*args):
print('***noname函数***')
print("-----模拟在目标方法之前织入的Advice-----")
fn(*args)
print("-----模拟在目标方法之后织入的Advice-----")
return nonename
#被装饰的函数
#1)test函数会被作为参数传给fo1()装饰器函数
#2)test函数就被替换成fo1装饰器函数的返回值(noname)
@fo1
def test(a, b):
print('test函数')
print('参数a:',a)
print('参数b:',b)
#表面上是调用test函数,实际上是调用fo1装饰器函数的返回值(noname)
test(2,4)