【发布时间】:2011-08-22 14:21:17
【问题描述】:
我正在尝试了解如何装饰装饰器,并想尝试以下方法:
假设我有两个装饰器并将它们应用到函数hello():
def wrap(f):
def wrapper():
return " ".join(f())
return wrapper
def upper(f):
def uppercase(*args, **kargs):
a,b = f(*args, **kargs)
return a.upper(), b.upper()
return uppercase
@wrap
@upper
def hello():
return "hello","world"
print(hello())
然后我必须开始为其他功能添加其他装饰器,但通常@wrap 装饰器会“包装所有这些”
def lower(f):
def lowercase(*args, **kargs):
a,b = f(*args, **kargs)
return a.lower(), b.lower()
return lowercase
@wrap
@lower
def byebye():
return "bye", "bye"
如何编写一个装饰器来装饰我的 @lower 和 @upper 装饰器?见下文:
@wrap
def lower():
...
@wrap
def upper():
...
要达到与上述相同的结果,只需这样做:
@upper
def hello():
...
@lower
def byebye():
...
【问题讨论】:
-
您可能想阅读以下内容:stackoverflow.com/questions/739654/…。文末有装饰装饰器的例子,不过答案慢慢介绍给大家。