📊 Capítulo 10: Interfaces, ABCs & Protocol
Especialização em Sistemas com Python
🗺️ Tipagem Nominal (ABC) vs Tipagem Estrutural Estática (Protocol / PEP 544)
flowchart TD
subgraph NOMINAL ["Tipagem Nominal (abc.ABC)"]
ABC["class Repositorio(ABC):\n @abstractmethod\n def salvar(self): ..."]
IMPL1["class SqlRepo(Repositorio):\n(Obrigado a herdar explicitamente da classe base!)"]
ABC --> IMPL1
end
subgraph STRUCTURAL ["Tipagem Estrutural (typing.Protocol)"]
PROTO["class Renderizavel(Protocol):\n def render(self) -> str: ..."]
IMPL2["class Botao:\n def render(self) -> str: return '<button />'\n(NUNCA herdou de Renderizavel, mas o mypy aceita com 100% de segurança estática!) ⚡"]
PROTO -.-> |"Atende ao formato"| IMPL2
end
style NOMINAL fill:#ede7f6,stroke:#512da8,stroke-width:2px
style ABC fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style IMPL1 fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style STRUCTURAL fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style PROTO fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style IMPL2 fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: Classes Abstratas com abc.ABC
@abstractmethod: Força as classes filhas a implementarem o método. Se tentar instanciar uma classe que esqueceu um método abstrato, o Python disparaTypeErrorimediatamente!
🎯 Slide 2: A Mágica do typing.Protocol
from typing import Protocol
class Fechavel(Protocol):
def close(self) -> None:
...
def finalizar(recurso: Fechavel) -> None:
recurso.close()
- Permite tipar funções esperando comportamentos sem forçar bibliotecas de terceiros a herdarem das suas classes abstratas!
🎯 Slide 3: @runtime_checkable
- Torna o
Protocolverificável em tempo de execução viaisinstance(obj, Fechavel).
🔗 Navegação do Capítulo 10
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim