设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。
装饰模式:动态的给对象添加额外的功能。
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/