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



  • 相关阅读:
    软件测试 Lab1 实验报告
    软件测试 Homework2
    谈谈最近的一个让我印象深刻的错误
    Bill Manager Problem Statement
    C#学习记录(九)Windows Phone开发中的Binding
    C#学习记录(八) XML Serializer尝试
    C#学习记录(七)LINQ语句及LAMDA表达式
    C#学习记录(六)
    软件测试之作业三
    软件测试之实验一
  • 原文地址:https://www.cnblogs.com/qiangyuzhou/p/10787413.html
Copyright © 2011-2022 走看看