Python-如何制作一个功能装饰链?

如何在Python中制作两个装饰器,以完成以下工作?

@makebold

@makeitalic

def say():

return "Hello"

…应返回:

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

我并不是想HTML在实际的应用程序中采用这种方式-只是想了解装饰器和装饰器链接是如何工作的。

回答:

查看文档,以了解装饰器如何工作。

from functools import wraps

def makebold(fn):

@wraps(fn)

def wrapped(*args, **kwargs):

return "<b>" + fn(*args, **kwargs) + "</b>"

return wrapped

def makeitalic(fn):

@wraps(fn)

def wrapped(*args, **kwargs):

return "<i>" + fn(*args, **kwargs) + "</i>"

return wrapped

@makebold

@makeitalic

def hello():

return "hello world"

@makebold

@makeitalic

def log(s):

return s

print hello() # returns "<b><i>hello world</i></b>"

print hello.__name__ # with functools.wraps() this returns "hello"

print log('hello') # returns "<b><i>hello</i></b>"

以上是 Python-如何制作一个功能装饰链? 的全部内容, 来源链接: utcz.com/qa/413070.html

回到顶部