decir que tengo los siguientes mixins que se solapa entre sí por tocar dispatch()
:¿Cómo afecta el orden de mixins a la clase derivada?
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)
Si quiero mi punto de vista que pasar por el orden, compruebe A -> comprobar B, debe ser mi código MyView(FooMixin, BarMixin, View)
o MyView(BarMixin, FooMixin, View)
?
¿Y por qué siempre ponemos View
o sus subclases después de mixins? (He notado esto al leer el código fuente de las vistas genéricas de django, pero no sé cuál es el motivo, si lo hay)
thx agf. Mi pregunta estaba destinada a ser "por qué se agrega a la última" y usted la ha respondido. Aclamaciones. – tamakisquare
Para que quede claro, el único método que esto llama directamente es 'FooMixin.dispatch'. 'super (FooMixin, self) .dispatch' luego evalúa como' BarMixin.dispatch' porque 'object' no tiene un método' dispatch'. 'super (BarMixin, self) .dispatch' se evalúa como' UltimateBase.dispatch' por el mismo motivo. –
@MadPhysicist Eso no está del todo bien. Esto funcionará incluso si el método también está definido por un objeto: pruébelo usted mismo. Vea la respuesta vinculada para más información. – agf