Interface com ABC
Em bibliotecas como Django ou sistemas de pagamento, você frequentemente precisa garantir que diferentes classes sigam o mesmo contrato sem ditar como cada uma funciona. As classes abstratas (ABC) resolvem isso: você define o que cada método deve fazer, e se alguma classe filha esquecer de implementar, o erro aparece na hora de instanciar — não em tempo de execução. Isso evita bugs silenciosos e torna seu código mais confiável.
O PROBLEMA
Interface Pagamento com pagar(). CartaoCredito, Boleto e Pix implementam.
EXEMPLO
CartaoCredito().pagar(100) → "Pagando R$100"
SOBRE O CONCEITO
O módulo abc fornece a classe ABC e o decorador @abstractmethod. Ao herdar de ABC, você transforma a classe em abstrata, ou seja, ela não pode ser instanciada diretamente. Métodos marcados com @abstractmethod são obrigatórios em todas as subclasses concretas. O erro comum 'não implementar em todas' acontece porque o Python permite definir a classe filha sem implementar, mas ao tentar instanciá-la (CartaoCredito()) acusa: TypeError: Can't instantiate abstract class CartaoCredito with abstract method pagar. Para corrigir, cada classe filha deve sobrescrever o método pagar() com sua própria lógica. Note que o __init__ pode ser herdado ou redefinido, mas os métodos abstratos precisam ser implementados em toda classe concreta.
RESOLUÇÃO