码迷,mamicode.com
首页 > 编程语言 > 详细

Python3-设计模式-装饰器模式

时间:2017-03-15 15:05:25      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:技术   logs   设计模式   装饰器模式   hid   模式   sed   检查   tar   

装饰器模式

  动态的给原有对象添加一些额外的职责,面向切面编程(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)
简单装饰器

 

Python3-设计模式-装饰器模式

标签:技术   logs   设计模式   装饰器模式   hid   模式   sed   检查   tar   

原文地址:http://www.cnblogs.com/qq1207501666/p/6553911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!