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