[Python设计模式] 03 - 装饰模式

设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。

装饰模式:动态的给对象添加额外的功能。
Python内置了很多对装饰器的支持,因此在Python中使用装饰模式是非常容易的,下面是一个典型的例子,给函数增加日志功能:

import functools 
def log_wrapper(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs):
        print '在函数执行前加日志'
        ret = fun(*args, **kwargs)
        print '在函数执行后家日志'
        return ret
    return wrapper


@log_wrapper
def test():
    print 'Hello, 世界'

functools.wraps是Python标准库提供的一个特殊的装饰器,用来解决装饰器带来的一些常规问题,如函数名称、doc等的不一致问题。@是Python针对装饰器提供的一个语法糖,上面的@log_wrapper相当于wrap_test = log_rapper(test),用@后,这个步骤由解释器代劳了。

装饰器是Python编程必须掌握的一项技能,在编码过程中经常会用到。

原文地址:http://www.isware.cn/python-design-pattern/04-decorator/

你可能感兴趣的:([Python设计模式] 03 - 装饰模式)