我正在使用大部分时间,例如:
def function(some,params):
pass
function.arg1 = val1
function.arg2 = val2
但这不是完全DRY,如果我将数十个args添加到这样的函数或方法中,并且出于某种原因,我需要更改函数名称,这会很烦人,因为例如,我需要将所有
function
更改为function2
。也许有一个内置的python装饰器,我可以这样使用:@some_decorator(arg1=val1, arg2=val2, arg3=val3)
def function(some, params):
pass
更改功能名称(或使用其他名称复制功能)会节省很多时间。任何人都知道是否有内置的python吗?我知道创建这样的装饰器没什么大不了的,但是然后我必须将其包含在我的所有项目中,因此内置它会容易得多。
最佳答案
这应该做的工作
from functools import wraps
def some_decorator(arg1, arg2):
def wrapper(func):
@wraps(func)
def inner_wrapper(*args, **kwargs):
func(*args, **kwargs)
inner_wrapper.arg1 = arg1
inner_wrapper.arg2 = arg2
return inner_wrapper
return wrapper
当然,如果方便的话,可以将装饰器中的
arg1
和arg2
更改为**kwargs
。关于python - 装饰器将给定的kwargs转换为函数的attrs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23950238/