我有一个像下面这样的龙卷风方法,我试图装饰方法来缓存东西。我有以下设置
def request_cacher(x):
def wrapper(funca):
@functools.wraps(funca)
@asynchronous
@coroutine
def wrapped_f(self, *args, **kwargs):
pass
return wrapped_f
return wrapper
class PhotoListHandler(BaseHandler):
@request_cacher
@auth_required
@asynchronous
@coroutine
def get(self):
pass
我收到错误,AttributeError: 'PhotoListHandler' object has no attribute '__name__'
有什么想法吗?在
您的代码从},而不是返回函数。在
functools.wraps(funca)
抛出,因此funca
必须是PhotoListHandler
实例,而不是您想要的get
方法。我相信这意味着堆栈下面的下一个装饰器auth_required
写得不正确:auth_required
返回的是{当我在这里的时候:在一个经过身份验证的函数上堆叠一个缓存在我看来是错误的。第一个经过身份验证的用户的照片列表不会被缓存,然后显示给所有后续用户吗?在
问题是您将
request_cacher
修饰符定义为带参数的装饰器,但忘记传递参数!在考虑以下代码:
当您尝试在实例中使用
^{pr2}$method
时,您将得到:正确使用装饰器:
另一种解决方法是从装饰器中移除一层:
您可以看到它不会引发错误:
我想这可能对你有用
相关问题 更多 >
编程相关推荐