zoukankan      html  css  js  c++  java
  • 装饰器01

    # 装饰器:装饰器就是闭包的一个应用场景
    # -- 外层函数与内存函数形成的闭包结构的一种综合使用


    # def huaping():
    # print('插花功能')

    # 需求:如何拓展一个原有函数的功能
    # -- 修改源代码
    # -- 创建一个包含该功能和其他新功能的新函数

    # 开放封闭原则:
    # 开放:拓展功能的点是开放的 - 可以为之前的函数添加新功能
    # 封闭:1.不能改变原函数的源代码 2.还有通过原函数的函数对象来调用函数

    # 错误一:修改了源代码
    # def huaping():
    # print('插花功能')
    # print('观赏功能')
    # huaping()

    # 错误二:改变了调用方式
    # def huaping():
    # print('插花功能')
    # def my_huaping(fn):
    # fn()
    # print('观赏功能')
    # my_huaping(huaping)

    # 装饰器:满足开放封闭原则还能拓展新功能,简单
    '''
    def huaping():
    print('插花功能')

    temp = huaping
    # temp = '呵呵'
    def my_huaping():
    temp()
    print('观赏功能')
    huaping = my_huaping

    huaping()
    '''

    # 装饰器演变一:
    '''
    def huaping():
    print('插花功能')

    def outer(fn): # fn = huaping
    # temp = huaping # 可以提取到实参对形参传递
    def my_huaping():
    fn()
    print('观赏功能')
    return my_huaping
    huaping = outer(huaping) # 要整合该条逻辑

    huaping()
    '''

    # 装饰器演变二:
    def outer(fn): # fn = 原功能的huaping
    def my_huaping(): # my_huaping => 新功能的huaping
    fn()
    print('观赏功能')
    return my_huaping

    @outer # huaping = outer(huaping) 被装饰的函数对象 = 装饰器外层函数对象(被装饰的函数对象)
    def huaping():
    print('插花功能')

    huaping() # 被装饰后的my_huaping



  • 相关阅读:
    《C++必知必会》读书笔记
    看美图是一种享受
    C指针-指向另一指针的指针
    顺序队列基本操作
    Using Windows Live Writer to write first offline blog
    堆和栈的区别 [摘录]
    进程与线程的区别
    《Effective C#》
    析构函数virtual与非virtual区别
    常用SQL语句技法
  • 原文地址:https://www.cnblogs.com/qiangyuzhou/p/10787413.html
Copyright © 2011-2022 走看看