Questões de pedido

Acabei de descobrir que a ordem é importante ao usar herança múltipla em classes Python. Acho que deveria esperar isso, até me lembro de ter lido isso nos documentos, mas pensei “Ei, vamos compartilhar uma dica no coderwall, talvez assim eu não esquecerei mais tarde e fui mordido na bunda por bichos estranhos”.

Então, um pequeno exemplo (do código real em que estou trabalhando)

class Service(object):
def all(self):
return self.__model__.query.all()

class FilterInactiveMixin(object):
def all(self):
return self.__model__.query.filter_by(active=True)

class UsersServiceThatWorks(FilterInactiveMixin, Service):
pass

class UsersServiceThatDoesnt(Service, FilterInactiveMixin):
pass

Então, basicamente, ao chamar o allmétodo em uma UserServiceThatWorksinstância, o método de FilterInactiveMixinserá chamado. Se você inverter a ordem, ela nunca será chamada e você provavelmente terá um comportamento estranho.