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!