O LIVRO DO CALANGO: 2ª EDIÇÃO A CAMINHO •Disponível como Early Release parcial na plataforma O’Reilly Learning •Cerca de 100 páginas sobre type hints, em 4 capítulos + dezenas de exemplos •Novos exemplos simples com asyncio e concurrent.futures •Capítulo sobre protocolos e classes abstratas 100% repensado •Versão impressa EN: 4º trimestre, 2021 •Versão PT-BR: tradução começará depois da versão impressa EN 3
O IDEAL É SER PRECISO NOS TIPOS DE RETORNO 11 Normalmente você sabe qual o tipo sua função vai devolver, então especifique o tipo da forma mais precisa. Lembre-se da Lei de Postel, ou Princípio da Robustez
PASSO 1: COMPARANDO DOIS NÚMEROS 15 No módulo numbers de Python já existe uma ABC numbers.Number. Porque não usá-la? Resposta no final, se der tempo e alguém perguntar...
DUCK TYPING OU TIPAGEM PATO: A ORIGEM DO TERMO 17 Não verifique se é-um pato: verifique se grasna-como-um-pato, anda-como-um-pato, etc. dependendo de qual parte do comportamento semelhante-a-pato você precisa [...] — Alex Martelli em comp-lang-python, 2000-07-26
INTERFACE É A CHAVE 24 Programe para uma interface, não para uma implementação — 1º Princípio de Projeto Orientado a Objetos descrito no livro Padrões de Projeto de Gamma, Helm, Johnson & Vlissides
COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo: qualquer objeto que implementa .quack() é um pato.
ABC (Abstract Base Class): uma instância de Marreco é um pato porque Marreco herda de Pato. 29 “objeto semelhante a pato” (duck-like object) é um TIPO ESTRUTURAL
COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo: qualquer objeto que implementa .quack() é um pato.
ABC (Abstract Base Class): uma instância de Marreco é um pato porque Marreco herda de Pato. 30 “objeto semelhante a pato” (duck-like object) é um TIPO ESTRUTURAL Marreco é um TIPO NOMINAL
37 Veja o código completo da classe abstrata (ABC) numbers.Number Ela não serve para tipagem estática porque não define nenhum método! Se você declarar uma variável do tipo numbers.Number, o Mypy rejeitará qualquer operação com essa variável!