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 all
método em uma UserServiceThatWorks
instância, o método de FilterInactiveMixin
será chamado. Se você inverter a ordem, ela nunca será chamada e você provavelmente terá um comportamento estranho.