Para proyectos más grandes o críticos, es preferible usar interfaces formales, definidas a través del módulo abc
. Estas proporcionan una forma de forzar la implementación de métodos en las clases derivadas.
from abc import ABC, abstractmethod
class Mando(ABC):
@abstractmethod
def encender(self):
pass
@abstractmethod
def cambiar_canal(self, canal):
pass
@abstractmethod
def subir_volumen(self):
pass
@abstractmethod
def bajar_volumen(self):
pass
Con este enfoque:
- No se pueden crear instancias de
Mando
directamente. - Cualquier clase que herede de
Mando
debe implementar todos los métodos abstractos, o se generará un error al intentar instanciarla.
class MandoSamsung(Mando):
def encender(self):
print("Samsung encendido")
def cambiar_canal(self, canal):
print(f"Samsung cambia a canal {canal}")
def subir_volumen(self):
print("Samsung subiendo volumen")
def bajar_volumen(self):
print("Samsung bajando volumen")
# Esto funciona:
control = MandoSamsung()
control.encender()
Importante: Si una clase hija omite uno de los métodos abstractos, Python lanzará un TypeError
al intentar crear una instancia.