第二十五节 装饰器的原理实现

'''
装饰器:基于开放封闭原则,在不修改原功能的模块的前提下,使用装饰器对原功能进行扩展
封闭:已实现的功能代码
开放:对扩展开发

'''
# 装饰器的实现过程
# 在这里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) 
'''

猜你喜欢

转载自www.cnblogs.com/kogmaw/p/12602544.html