-5

我的 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"]字典中设置项目。没有错误,但它没有做它应该做的事情。有人可以帮帮我吗?

4

1 回答 1

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 方法。

于 2013-08-19T09:59:18.153 回答