我正在使用大部分时间,例如:

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

当然,如果方便的话,可以将装饰器中的arg1arg2更改为**kwargs

关于python - 装饰器将给定的kwargs转换为函数的attrs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23950238/

10-10 13:22