Dire, ho il seguente mixins che si sovrappone con l'altro toccando dispatch()
:In che modo l'ordine dei mixin influisce sulla classe derivata?
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)
Se voglio mio punto di vista di passare attraverso l'ordine, controllare A -> controllare B, dovrebbe il mio codice essere MyView(FooMixin, BarMixin, View)
o MyView(BarMixin, FooMixin, View)
?
E perché mettiamo sempre View
o le sue sottoclassi dopo i mix? (Ho notato questo dalla lettura del codice sorgente delle viste generiche di django, ma non conosco la logica alla base, se presente)
thx agf. La mia domanda è stata pensata per essere "perché è aggiunta all'ultimo" e tu hai risposto. Saluti. – tamakisquare
Giusto per essere chiari, l'unico metodo che chiama direttamente "FooMixin.dispatch". 'super (FooMixin, self) .dispatch' quindi valuta' BarMixin.dispatch' perché 'object' non ha un metodo' dispatch'. 'super (BarMixin, self) .dispatch' restituisce' UltimateBase.dispatch' per lo stesso motivo. –
@MadPhysicist Non è giusto. Funzionerà anche se il metodo è definito anche da oggetto: provalo tu stesso. Vedi la risposta collegata per maggiori informazioni. – agf