我正在为 Django REST API 实现一个内容感知缓存系统。我想开发一个可以添加到现有视图的组件,该组件将通过检查缓存并在未命中时回退到基类行为来修改基类的行为。
基本上,我有这样的事情:
class Base:
def get(self, request, *args, **kwargs):
....
return Response
class AnotherBase:
def get(self, request, *args, **kwargs):
....
return Response
class Derived(Base):
pass
class OtherDerived(AnotherBase):
pass
我最初的想法是做一些类似的事情
class Cacheable:
def get(self, request, *args, **kwargs):
cache_key = self.get_cache_key(request)
base_get = #.... and this is the problem
return cache.get(cache_key, base_get(request, *args, **kwargs))
def get_cache_key(self, request):
# .... do stuff
class Derived(Cacheable, Base):
pass
class AnotherDerived(Cacheable, AnotherBase):
pass
很明显这不起作用,因为我不知道如何,或者是否可能,或者是否建议从 mixin 访问兄弟超类。
我的目标是一种实现,它允许我在不触及现有类的内部结构的情况下向现有视图添加缓存行为。给定一个视图类, C, st C.get(request, *args, **kwargs) -> Response,是否有一个函数, F, stF(C).get(...在回退到 之前是否进行缓存检查C.get?在这个准正式的表示法中,我们会说向类定义中最左边的父类添加一个 mixin 算作一个函数。
使用方法装饰器是否更合适?或者类装饰器如何工作?
然后我__metaclass__在研究这个时看到了参考资料,但我不清楚这种方法是什么样的。
这是 Python 3.6
慕雪6442864
慕村225694
潇湘沐
相关分类