Вопрос по python – Как порядок миксинов влияет на производный класс?

39

Error: User Rate Limit Exceededdispatch():

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 - & gt; проверьте B, должен ли мой код бытьMyView(FooMixin, BarMixin, View)Error: User Rate Limit ExceededMyView(BarMixin, FooMixin, View)?

Error: User Rate Limit ExceededViewError: User Rate Limit Exceeded

Ваш Ответ

1   ответ
69

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded__mro__ attributeError: User Rate Limit ExceededFooMixinError: User Rate Limit Exceeded

class UltimateBase(object):
    def dispatch(self, *args, **kwargs):
        print 'base dispatch'

class FooMixin(object):
    def dispatch(self, *args, **kwargs):
        print 'perform check A'
        return super(FooMixin, self).dispatch(*args, **kwargs)

class BarMixin(object):
    def dispatch(self, *args, **kwargs):
        print 'perform check B'
        return super(BarMixin, self).dispatch(*args, **kwargs)

class FooBar(FooMixin, BarMixin, UltimateBase):
    pass

FooBar().dispatch()

Error: User Rate Limit Exceeded

perform check A
perform check B
base dispatch

ViewError: User Rate Limit Exceeded

Error: User Rate Limit ExceededFooMixin.dispatch. super(FooMixin, self).dispatch затем оцениваетBarMixin.dispatchError: User Rate Limit Exceededobject не имеетdispatchError: User Rate Limit Exceededsuper(BarMixin, self).dispatchError: User Rate Limit ExceededUltimateBase.dispatch по той же причине.
спасибо Мой вопрос должен был быть «почему он добавлен к последнему» и ты ответил на это. Приветствия. tamakisquare
@agf. Конечно. Виноват.objectотправка будет называться последней. Мое утверждение действительно должно было быть вопросом, но я отвлекся и забыл сделать это явным. Спасибо за ответ в любом случае :)
@MadPhysicist Это не совсем верно. Это будет работать, даже если метод также определен объектом - попробуйте сами. Смотрите связанный ответ для получения дополнительной информации.

Похожие вопросы