Contenido del Curso
Programación Orientada a Objetos en Python a Fondo
Programación Orientada a Objetos en Python a Fondo
Mezclas
Los mixins son ejemplos excepcionales de polimorfismo, ya que permiten alterar el comportamiento y mejorar la funcionalidad de otra clase. No están pensados para ser independientes y carecen de un contexto lógico diferenciado.
Las funciones adicionales pueden sustituir a las funciones básicas o complementarlas.
Veamos un ejemplo:
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()
puede tener una implementación diferente.
Mixins permiten responsabilidad para cambiar la funcionalidad en las clases.
Nota
- El nombre del mixin debe terminar con
Mixin
. Este es el acuerdo de los programadores.- Los mixins deben estar al principio del orden de herencia.
ClaseCiertaClase(PrimerMezcla, UltimoMezcla, PrimerPadre, UltimoPadre)`.- Puedes utilizar mixins para añadir nuevas funcionalidades en las clases.
- Los mixins se consideran código sucio porque utilizan atributos y métodos que no están específicamente pensados para ellos mismos (ya que los mixins están diseñados para otras clases). Por lo tanto, usar mixins se considera generalmente una mala práctica, y es mejor evitarlos y usarlos sólo cuando sea necesario.
¡Gracias por tus comentarios!