【发布时间】:2021-02-01 16:00:59
【问题描述】:
假设我有很多对互补的功能:
def comp_func1(arg1, arg2):
return f"comp_func1 {arg1} {arg2}"
def func1(arg1, arg2, flag=True):
if flag:
return f"func1 {arg1} {arg2}"
else:
return comp_func1(arg1, arg2)
def comp_func2(arg1, arg2):
return f"comp_func2 {arg1} {arg2}"
def func2(arg1, arg2, flag=True):
if flag:
return f"func2 {arg1} {arg2}"
else:
return comp_func2(arg1, arg2)
本质上,对于每个函数funcX,如果flag == True 则返回函数详细信息,但如果flag == False 则调用其补充函数comp_funcX,该函数返回补充函数详细信息。
不必在每个funcX 中使用if/else 语句,是否可以使用装饰器来清理或简化此代码?大致如下:
def decorator():
"""
Check the `flag` and choose whether to call the complementary function
"""
def wrapper():
if flag:
return func(arg1, arg2)
else:
return comp_func(args, arg2)
return wrapper
def comp_func1(arg1, arg2):
return f"comp_func1 {arg1} {arg2}"
@decorator(comp_func1)
def func1(arg1, arg2, flag=True):
return f"func1 {arg1} {arg2}"
def comp_func2(arg1, arg2):
return f"comp_func2 {arg1} {arg2}"
@decorator(comp_func2)
def func2(arg1, arg2, flag=True):
return f"func2 {arg1} {arg2}"
【问题讨论】:
-
除了你的装饰器中缺少一些细节,你没有说它有什么问题。看来您正在寻找替代解决方案...