我正在尝试在我的 Google App Engine 应用中开始使用内存缓存。我没有创建一个检查内存缓存然后可能查询数据库的函数,而是决定重写我的模型的 all() 类方法。到目前为止,这是我的代码:
def all(cls, order=None):
result = memcache.get("allitems")
if not result or not memcache.get("updateitems"):
logging.info(list(super(Item, cls.all())))
result = list(super(Item, cls).all()).sort(key=lambda x: getattr(x, order) if order else str(x))
memcache.set("allitems", result)
memcache.set("updateitems", True)
logging.info("DB Query for items")
return result
我原以为这会奏效。但相反,我得到一个 RuntimeError 说超出了递归深度。我认为这来自对 super() 方法的误解。很抱歉把代码和订购的东西弄乱了。但也许问题也出在某个地方。我发现的一个地方说应该像这样调用超级方法:
super(supercls, cls_or_self)
但这不适用于 GAE 的 API:
super(db.Model, cls)
这不知道要查询哪个模型。有人请告诉我我做错了什么,也许让我更好地理解 super()。
编辑:感谢@Matthew,问题出在第一次 logging.info()
通话时括号放错了位置。现在我有另一个问题,该方法只是返回无。我不知道这是否意味着返回 None 的super
实现all()
(也许它不知道是什么实体在调用它?)或者只是我的代码存在其他一些错误。