如何在 Python 中制作两个装饰器来执行以下操作?
@makebold
@makeitalic
def say():
return "Hello"
...应该返回:
"<b><i>Hello</i></b>"
我不是要在实际应用程序中以这种方式制作
HTML
- 只是想了解装饰器和装饰器链接是如何工作的。 最佳答案
查看 the documentation 以了解装饰器是如何工作的。这是你要求的:
from functools import wraps
def makebold(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<b>" + fn(*args, **kwargs) + "</b>"
return wrapper
def makeitalic(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<i>" + fn(*args, **kwargs) + "</i>"
return wrapper
@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 - 如何制作函数装饰器并将它们链接在一起?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/739654/