Save 37% off PRO during our Black Friday Sale! »

Protocol: pedra angular das type hints em Python

Protocol: pedra angular das type hints em Python

Saiba porquê `typing.Protocol` foi o 
acréscimo mais importante do
 sistema de tipos estáticos de Python.

Versão revisada, incluindo explicação sobre o problema de `numbers.Number` no final.

27c093d0834208f4712faaaec38c2c5c?s=128

Luciano Ramalho

March 24, 2021
Tweet

Transcript

  1. PEDRA ANGULAR DE TYPE HINTS Porquê typing.Protocol foi o
 acréscimo

    mais importante do
 sistema de tipos estáticos de Python P r o t o c o l o s 🦆
  2. PEDRA ANGULAR 2

  3. 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
  4. ESTUDO DE CASO: MAX(...) 4

  5. A FUNÇÃO MAX(...) 5

  6. UMA IMPLEMENTAÇÃO: MYMAX.MAX(...) Código dos exemplos no Github: 6 http://bit.ly/mymax-tdc

  7. MYMAX.MAX(...) COM ANOTAÇÕES DE TIPO Código dos exemplos no Github:

    7 http://bit.ly/mymax-tdc
  8. CASO MAX: PASSO A PASSO Comparando inteiros 8

  9. PASSO 0: COMPARANDO DOIS INTEIROS 9 http://bit.ly/mymax-tdc

  10. TROPEÇO 1: COMPARANDO DOIS NÚMEROS #SQN 10 Porque não fazer

    assim?
  11. 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
  12. 12 Seja rigoroso com o que você envia, e tolerante

    com o que você recebe. —Jon Postel
  13. PASSO 1: COMPARANDO DOIS NÚMEROS 13

  14. PASSO 1: COMPARANDO DOIS NÚMEROS 14 No módulo numbers de

    Python já existe uma ABC numbers.Number.
 Porque não usá-la?
  15. 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...
  16. PASSO 2: COMPARANDO DOIS OBJETOS COMPARÁVEIS O que é comparável

    em Python? Vamos perguntar no console do interpretador: 16
  17. 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
  18. PASSO 2: COMPARANDO DOIS OBJETOS COMPARÁVEIS 18

  19. PASSO 3: COMPARANDO N OBJETOS 19

  20. PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 20

  21. PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 21

  22. PASSO 4: COMPARANDO N OBJETOS, COM FUNÇÃO KEY= 22

  23. INTERFACES EM PYTHON 23

  24. 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

  25. O BENDITO CAPÍTULO 13... 25

  26. 26 Socorro!
 Por onde eu começo?

  27. COMO LIDAMOS COM INTERFACES EM PYTHON Protocolo:
 qualquer objeto que

    implementa .quack() é um pato.
 27
  28. 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. 28
  29. 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
  30. 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
  31. QUATRO ABORDAGENS PARA TIPOS 31 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO

    DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato
  32. QUATRO ABORDAGENS PARA TIPOS 32 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO

    DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática
  33. QUATRO ABORDAGENS PARA TIPOS 33 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO

    DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática tipagem pato estática
  34. QUATRO ABORDAGENS PARA TIPOS 34 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO

    DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato tipagem
 estática tipagem pato estática tipagem
 ganso assunto para outro dia...
  35. 35 O mapa do capítulo 13!

  36. e-mail: luciano.ramalho@thoughtworks.com Twitter: @ramalhoorg MUITO GRATO!

  37. 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!