By ChatGPT:
Um mixin é uma classe em linguagens orientadas a objetos, como Python, que fornece funcionalidades reutilizáveis para outras classes, mas que normalmente não é instanciada por si só. Ao contrário da herança tradicional, onde uma classe filha herda diretamente de uma classe pai, o mixin é usado para adicionar comportamentos específicos a uma classe de forma modular, permitindo que ela mantenha sua herança principal.
Mixins são frequentemente utilizados para evitar duplicação de código, promovendo o princípio da composição ao invés de uma herança profunda, facilitando a extensão de funcionalidades de maneira flexível e organizada.
MRO
==Resumo: o primeiro mixin listado na herança tem precedência sobre os demais, e a classe mais à esquerda substitui as demais==
Em Python, a ordem de sobrescrita de métodos ao usar mixins é determinada pela Metaclass Resolution Order (MRO). A MRO é a ordem na qual as classes são pesquisadas quando um método é chamado. Essa ordem segue uma variação do algoritmo chamado C3 linearization, que assegura que:
- As classes de uma hierarquia de herança são percorridas da esquerda para a direita conforme estão na definição da classe.
- Cada classe é visitada apenas uma vez.
- As classes pai são percorridas antes das classes filhas.
Exemplo:
Explicação:
- Aqui,
MinhaClasse
herda deMixin1
,Mixin2
eBase
. - Quando chamamos
obj.metodo()
, a ordem de pesquisa será definida pela MRO. - A MRO pode ser visualizada usando
MinhaClasse.__mro__
ouMinhaClasse.mro()
.
Saída do exemplo:
A ordem de sobrescrita de métodos segue a sequência de classes da MRO. Neste caso, o método de Mixin1
será chamado primeiro, seguido por Mixin2
e Base
, se não for encontrado em classes anteriores.
Portanto, o primeiro mixin listado na herança tem precedência sobre os demais, e a classe mais à esquerda substitui as demais.