Python Decorator没有执行任务

时间:2013-08-19 09:47:01

标签: python decorator

我的API中有以下方法,我想让serve函数成为装饰器,因此可以这样使用:@api.serve

def add_rule(self, func, methods):    
    for item in methods:
        if item in self._config["MAP"]:
            raise RuntimeError("Cannot override functions.")
        self._config["MAP"][item] = func

def serve(self, methods=["POST","GET","HEAD"]):
    def wrapper(func):
        self.add_rule(func, methods)
        return func

    return wrapper

然而,一切似乎都不起作用,即在_config["MAP"]字典中设置项目。没有错误,但它没有做它应该做的事情。有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:0)

1)您的serve函数看起来不像装饰器。 你应该这样做...... 在类定义之外写这个函数。

def serve(func):
    def wrapper(*args,**kwargs):
        func(*agrs,**kwargs) 
    return wrapper

2)你也可以这样做。

def serve(self,func):
    def wrapper(self,*args,**kwargs):
        func(self,*args,**kwargs)
    return wrapper

你应该在func方法定义中调用你的add_rule方法。