PythonPOOintermediario

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

Mais exercícios de POO

PYPOI2I · IntermediárioHerança simplesPYPOI1I · IntermediárioProperty e setterPYPOI5I · IntermediárioClasse abstrataPYPOO7B · BásicoMétodo estático
Ver todos os exercícios de Python