'''
装饰器:基于开放封闭原则,在不修改原功能的模块的前提下,使用装饰器对原功能进行扩展
封闭:已实现的功能代码
开放:对扩展开发
'''
# 装饰器的实现过程
# 在这里test1是原函数,set_func是装饰过后的函数
def set_func(func):
def call_func():
print('....权限1.....')
print('....权限2.....')
func()
return call_func
@set_func # 等价于 test1 = set_func(test1)
def test1():
print(".......这是test1......")
# 通过变量的引用达到不需要更换函数名的效果,对原函数功能进行了扩展
# test1 = set_func(test1) # 将set_func函数执行后的return返回对象引用并且将test1函数的引用给传递进去了,此时的test1相当于call_func函数
test1()
test1()
test1()
# 这里调用test1相当于调用call_func,而对test1函数的调用是通过上一个传递进来的参数,在call_func内部调用的
'''
def set_func(func,num):
a = func
print('....权限1.....')
print('....权限2.....')
a(num)
等价于 test1 = set_func(test1)
def test1(num):
print(".......这是test1......%d" % num)
test1 = set_func(test1,100)
test1(100)
test1(200)
'''