Conteúdo do Curso
Programação Orientada a Objetos em Python Avançado
Programação Orientada a Objetos em Python Avançado
Mixins
Mixins são exemplos excepcionais de polimorfismo, pois permitem alterar o comportamento e aprimorar a funcionalidade de outra classe. Eles não são feitos para serem usados de forma independente e não possuem um contexto lógico distinto.
Funcionalidades extras podem tanto substituir a funcionalidade base quanto complementá-la.
Vamos considerar um exemplo:
class AdminAccessMixin: access = "Admin" def check_access(self): print(f"The {self.username} has Admin Access Type") class BlockedAccessMixin: access = "Blocked" def check_access(self): print(f"The {self.username} is blocked") class User: access = "User" def __init__(self, username, password): self.username = username self.password = password def check_access(self): print(f"The {self.username} has default access") class BlockedUser(BlockedAccessMixin, User): pass class Admin(AdminAccessMixin, User): pass user = User("bob111", "bob123secret") admin = Admin("top.admin", "secret_password") blocked_user = BlockedUser("hacker911", "qzdfaswe") for person in [user, admin, blocked_user]: person.check_access()
Cada método check_access()
pode ter uma implementação diferente.
Mixins permitem a responsabilidade de alterar a funcionalidade nas classes.
Nota
O nome do Mixin deve terminar com
Mixin
. Este é o acordo entre os programadores.Os Mixins devem estar no início da ordem de herança.
class SomeClass(FirstMixin, LastMixin, FirstParent, LastParent)
Você pode usar mixins para adicionar novas funcionalidades em classes.
Os Mixins são considerados código sujo porque utilizam atributos e métodos que não são especificamente destinados a eles próprios (já que os mixins são projetados para outras classes). Portanto, usar mixins é geralmente considerado uma má prática, e é melhor evitá-los e usá-los apenas quando necessário.
Obrigado pelo seu feedback!