31
說,我有以下的混入,通過觸摸dispatch()
相互重疊:mixin的順序如何影響派生類?
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)
?
爲什麼我們總是在mixin之後放置View
或它的子類? (我從django通用視圖的源代碼中已經注意到了這一點,但是我不知道它背後的基本原理,如果有的話)
thx agf。我的問題是爲了「爲什麼添加到最後」並且你已經回答了它。乾杯。 – tamakisquare 2012-04-05 18:05:18
爲了清楚起見,這個直接調用的唯一方法是'FooMixin.dispatch'。 'super(FooMixin,self).dispatch'然後評估爲'BarMixin.dispatch',因爲'object'沒有'dispatch'方法。 'super(BarMixin,self).dispatch'由於同樣的原因評估爲'UltimateBase.dispatch'。 – 2018-01-31 21:48:43
@MadPhysicist這不太對。即使該方法也是由對象定義的方法,這將起作用 - 請親自嘗試。有關更多信息,請參閱鏈接的答案。 – agf 2018-02-01 02:10:14