zoukankan      html  css  js  c++  java
  • Python3-设计模式-装饰器模式

    装饰器模式

      动态的给原有对象添加一些额外的职责,面向切面编程(AOP),多用于和主业务无关,但又必须的业务,如:登录认证、加锁、权限检查等

    Python代码实现示例

      需求点:

        1.在old_func()的输出前面输出Hello,everyone!

        2.在old_func()的输出后面输出Thank you!

      要求:

        1.不能改变原调用方式

        2.要遵循开闭原则,不能修改函数内的代码

    # 原有函数
    def old_func(name, age):
        print("My name is %s,I'm %d years old!" % (name, age))
    
    
    # 原调用方式
    name = "Jet"
    age = 18
    old_func(name, age)
    源代码
    def before():
        print("Hello,everyone!")
    
    
    def after():
        print("Thank you!")
    
    
    def handle_args(before, after):
        def handle_func(func):
            def new_func(*args, **kwargs):
                before()
                func(*args, **kwargs)
                after()
            return new_func
        return handle_func
    
    
    @handle_args(before, after)    # Python语法糖
    def old_func(name, age):
        print("My name is %s,I'm %d years old!" % (name, age))
    
    
    # 原调用方式
    name = "Jet"
    age = 18
    old_func(name, age)
    带参数装饰器
    def handle_func(func):
        def new_func(*args, **kwargs):
            print("Hello,everyone!")
            func(*args, **kwargs)
            print("Thank you!")
        return new_func
    
    
    @handle_func
    def old_func(name, age):
        print("My name is %s,I'm %d years old!" % (name, age))
    
    
    # 原调用方式
    name = "Jet"
    age = 18
    old_func(name, age)
    简单装饰器
  • 相关阅读:
    Oracle时间日期操作
    c# 语音卡控制语音卡实现电话录音
    ORACLE日期时间函数大全
    oracle的表分区
    如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
    优化SQL Server数据库
    oracle知识回顾
    增强现实 artoolkit
    高负载系统架构设计
    三套.net支持库
  • 原文地址:https://www.cnblogs.com/qq1207501666/p/6553911.html
Copyright © 2011-2022 走看看