Capítulo 10: Polimorfismo Estrutural com typing.Protocol e Duck Typing Estático
Especialização em Sistemas com Python & POO com Type Hints • Capítulo 10
🗺️ Mapa Conceitual do Tópico
classDiagram
class ProvedorAutenticacaoProtocol {
<<Protocol>>
+nome_provedor: str
+autenticar(credenciais)* tuple
}
class ProvedorOAuth2 {
+nome_provedor: str
+autenticar(credenciais) tuple
}
class ProvedorLdap {
+nome_provedor: str
+autenticar(credenciais) tuple
}
ProvedorOAuth2 ..|> ProvedorAutenticacaoProtocol : Duck Typing Estático
ProvedorLdap ..|> ProvedorAutenticacaoProtocol : Duck Typing Estático
📜 1. Interfaces Estruturais com typing.Protocol (PEP 544)
Diferente da herança nominal (abc.ABC), o typing.Protocol adota a tipagem estrutural (Duck Typing Estático): uma classe satisfaz a interface automaticamente caso implemente a assinatura exigida, sem precisar herdar explicitamente do protocolo.
@runtime_checkable: Permite checagens em tempo de execução viaisinstance(obj, MeuProtocolo).
💻 Exemplo Prático e Tipado
"""
exemplo_10_interfaces_e_protocols.py - Duck Typing Estático com typing.Protocol
"""
from typing import Any, Protocol, runtime_checkable
@runtime_checkable
class NotificadorProtocol(Protocol):
def enviar(self, destinatario: str, mensagem: str) -> bool:
...
class ServicoEmail:
def enviar(self, destinatario: str, mensagem: str) -> bool:
print(f"[EMAIL] Enviado para {destinatario}: {mensagem}")
return True
class ServicoSms:
def enviar(self, destinatario: str, mensagem: str) -> bool:
print(f"[SMS] Enviado para {destinatario}: {mensagem}")
return True
def disparar_alerta(canal: NotificadorProtocol, destino: str, msg: str) -> None:
if isinstance(canal, NotificadorProtocol):
canal.enviar(destino, msg)
if __name__ == "__main__":
disparar_alerta(ServicoEmail(), "admin@corp.com", "Servidor reiniciado")
disparar_alerta(ServicoSms(), "+5511999998888", "Alerta de segurança")
🔗 Recursos Pedagógicos do Capítulo 10
| Recurso Didático | Finalidade | Link de Acesso |
|---|---|---|
| 📊 Slides de Aula | Apresentação visual interativa com Dark Mode e suporte a teclado | Ver Slides |
| 🧠 Quiz Formativo | Teste interativo de fixação com feedback imediato por alternativa | Fazer Quiz |
| 💻 Exemplos de Código | Demonstrações funcionais com Type Hints e saída no console | Ver Exemplos |
| 🧩 Exercícios em 4 Níveis | Lista progressiva de fixação com gabarito em bloco colapsável | Resolver Exercícios |
| 🧬 Capítulo Anterior | 📚 Sumário de Tópicos | 🛡️ Próximo Capítulo |