zoukankan      html  css  js  c++  java
  • 第二十五节 装饰器的原理实现

    '''
    装饰器:基于开放封闭原则,在不修改原功能的模块的前提下,使用装饰器对原功能进行扩展
    封闭:已实现的功能代码
    开放:对扩展开发
    
    '''
    # 装饰器的实现过程
    # 在这里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) 
    '''
  • 相关阅读:
    Nginx 知识
    web页面乱码之字符集
    P2633 Count on a tree 树上主席树
    HDU 1542 线段树扫描线
    P4513 小白逛公园 线段树
    牛客4 C sequence
    P4126 [AHOI2009]最小割 网络流
    P3980 [NOI2008]志愿者招募 网络流
    P3313 [SDOI2014]旅行 动态开点线段树 树链剖分
    Planting Trees 单调队列
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12602544.html
Copyright © 2011-2022 走看看