【发布时间】:2021-01-08 11:48:48
【问题描述】:
假设一个装饰器改变了一个函数to_lower()的行为:
def transition(fn):
def to_upper(text: str):
print('the original behavior:' + fn(text))
return text.upper()
def to_capital(text: str):
print('the original behavior:' + fn(text))
return text.capitalize()
return to_upper
@transition
def to_lower(text: str):
return text.lower()
print(to_lower('AaBb'))
>>>
the original behavior:aabb
AABB
这很好用,如果我们将transition 的返回语句从return to_upper 更改为return to_capital,它会将行为从to_lower 更改为to_capital,这使得AaBb 变为Aabb
不用手动修改装饰器的return,
我们可以用mode之类的参数修改装饰器吗,如果我们调用
@transition(mode='to_upper'),它就像return to_upper,当我们打电话时
@transition(mode='to_capital'),它作为装饰器的return to_capital 工作?
【问题讨论】:
-
这个答案非常全面,可能会有所帮助:stackoverflow.com/a/5929165/7013263