python装饰器具有 *args和**夸尔格斯未能执行有关过多位置参数的错误消息



任何文章,教程等。我已经阅读了python中的写作装饰师,已经指出我使用 *args和** kwargs编写可以应用于任何功能和/或方法(包括此精彩介绍)。

但是我现在有以下代码:

def format_result(func):
    @wraps(func)
    def func_wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        # do something with result
        return result
    return func_wrapper

然后我使用如下:

class CategoryList(BaseResource):
    '''List or create categories'''
    @format_result
    def get(self):
        '''Create a new category'''
        return {'id': 1, 'name': 'Test Category'}

在我的应用程序中使用此代码时,我总是会收到以下错误消息:

File "...__init__.py", line 66, in func_wrapper
    result = func(*args, **kwargs)
TypeError: get() takes 1 positional argument but 2 were given

我做错了什么吗?如果相关,我的python -v是" python 3.5.1"。

非常感谢您!

它可能是因为您试图用装饰器包装一堂课的方法。在班级方法上使用的编写装饰器的要求有所不同,如果您需要一个可以在类同时使用的一个装饰器,甚至更糟。

您使用一个包装可以帮助您实施装饰者而不是尝试自己做的软件包,因为如果尝试自己做很多。

有很多陷阱。

我建议您查看wrapt软件包。请参阅:

  • http://wrapt.readthedocs.io

也值得阅读:

  • http://blog.dscpl.com.au/p/decorators-and-monkey-patching.html

如果您认为手滚装饰器总是会工作的。

如上所述,否则提供了调用get()的代码。如果此呼叫以某种方式关闭,那可能会引起问题。

最新更新