假设我有以下的混合器,它们之间通过接触dispatch()
产生了重叠:
class FooMixin(object):
def dispatch(self, *args, **kwargs):
# perform check A
...
return super(FooMixin, self).dispatch(*args, **kwargs)
class BarMixin(object):
def dispatch(self, *args, **kwargs):
# perform check B
...
return super(FooMixin, self).dispatch(*args, **kwargs)
如果我想让视图按照A检查 -> B检查的顺序进行,我的代码应该是MyView(FooMixin, BarMixin, View)
还是MyView(BarMixin, FooMixin, View)
?为什么我们总是把
View
或其子类放在混合类后面?(我注意到这一点是从阅读Django通用视图的源代码中发现的,但我不知道背后的原理,如果有的话)
FooMixin.dispatch
。然后,super(FooMixin, self).dispatch
的结果为BarMixin.dispatch
,因为object
没有dispatch
方法。同样的,super(BarMixin, self).dispatch
由于同样的原因,其结果为UltimateBase.dispatch
。 - Mad Physicistobject
的分派将会被最后调用。我的陈述实际上应该是一个问题,但我分心了,忘记明确说明了。无论如何,感谢您的回答 :) - Mad Physicist