理解python的decorator,pythondecorator,假定有这么一个需求,通过


假定有这么一个需求,通过给方法say()添加两个decorator方法@makebold@makeitalic,这样可以使say()的返回结果自动添上b标签和i标签。

@makebold@makeitalicdef say():   return "Hello"

上面的代码应该返回:

<b><i>Hello</i></b>

下面是实现代码:

def makebold(fn):    def wrapped():        return "<b>" + fn() + "</b>"    return wrappeddef makeitalic(fn):    def wrapped():        return "<i>" + fn() + "</i>"    return wrapped@makebold@makeitalicdef hello():    return "hello world"print hello() 

可以看到makeboldmakeitalic方法都对原函数做了修改,在原函数的返回结果上添加了对应标签。

不得不承认python是一个非常干练的语言,设计模式中的修饰模式在python中内置实现了。

评论关闭