【发布时间】:2020-03-03 07:37:57
【问题描述】:
我正在使用flask 和flask-restplus 编写一个webapi。我创建了一个装饰器来计算执行 api 调用的时间。
import time
class TimeCalculateDecorator:
def __init__(self, func):
self.function = func
def __call__(self,*args, **kws):
ts = time.time()
result = self.function(*args, **kws)
te = time.time()
print('func:%r args:[%r, %r] took: %2.4f sec' % \
(self.function.__name__, args, kw, te-ts))
return result
这就是我使用它的方式......
class MultipleEmp_controller(Resource):
@inject
def __init__(self,api, dataservice:DataServiceBase):
self.service = dataservice
@TimeCalculateDecorator
def get(self):
"""Get Request for version 1"""
emp_schema = EmployeeSchema(many=True)
emps = emp_schema.dump(self.service.getemployees())
return emps
当装饰器调用上面的控制器方法并发现 self 参数从那里丢失时,问题就出现了。这是确切的错误消息...
"get() missing 1 required positional argument: 'self'",
我尝试了谷歌,但没有运气。
我尝试了像下面这样的简单方法装饰器...
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print('func:%r args:[%r, %r] took: %2.4f sec' % \
(method.__name__, args, kw, te-ts))
return result
return timed
这一切都很好。当我将它作为类而不是方法时,问题就出现了。
【问题讨论】:
-
嗨 Drako...感谢您的回复...但我已经尝试过了...它是作为方法装饰器创建的,我希望它作为类...
标签: python flask flask-restplus