装饰师将给定的kwargs转换为功能的attrs

时间:2014-05-30 08:31:09

标签: python

我正在使用这样的大部分时间构建:

def function(some,params):
    pass
function.arg1 = val1
function.arg2 = val2

但是它并不是完全DRY而且如果我在这样的函数或方法中添加了几十个args而且我需要更改函数名称,因此我需要将所有function更改为{{1 }} 例如。也许有一个内置的python装饰器,我可以这样使用:

function2

当changin函数名称(或用其他名称复制函数)时,它将节省很多时间。任何人都知道python中是否有内置的东西?我知道创建这样的装饰器没什么大不了的,但是我必须将它包含在我的所有项目中,所以内置它会容易得多。

1 个答案:

答案 0 :(得分:1)

这应该做的工作

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