Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tipagem Pato, agora com tipos estáticos

Tipagem Pato, agora com tipos estáticos

Palestra feita para PythonBrasil 2020. Apresenta tipagem pato (duck typing) e como fazer anotações de tipo suportando essa forma de programar que é a razão do sucesso de Python. Exemplos incluem novidades do módulo typing como: Protocol, TypeVar e @overload

Luciano Ramalho

November 02, 2020
Tweet

More Decks by Luciano Ramalho

Other Decks in Programming

Transcript

  1. DUCK TYPING FTW Protocolos dinâmicos e estáticos:
 o jeito Pythônico

    de programar,
 agora com type hints para quem precisa delas. D e v o l t a a o f u t u r o
  2. 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, concentradas em 4 capítulos •Novos exemplos simples com asyncio e concurrent.futures •Capítulo sobre protocolos e classes abstratas 100% repensado •Versão impressa EN: 3º trimestre, 2021 •Versão PT-BR: tradução começará depois da versão impressa EN 2
  3. Programe para uma interface, não para uma implementação — Primeiro

    Princípio de Projeto Orientado a Objetos
 Gamma, Helm, Johnson & Vlissides
 em Padrões de Projeto, vulgo
 “o livro da Gangue dos Quatro”
  4. 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
  5. EXEMPLO: DOUBLE 12 o tipo de x é "qualquer coisa

    capaz de multiplicar" em outras palavras,
 x precisa implementar __mul__
  6. EXEMPLO: DOUBLE 14 o que acontece quando x não implementa

    __mul__? TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
  7. A BIBLIOTECA PADRÃO ESTÁ CHEIA DE EXEMPLOS ASSIM... max(arg1, arg2,

    *args[, key]) max(iterable, *[, key, default])
 16
  8. A BIBLIOTECA PADRÃO ESTÁ CHEIA DE EXEMPLOS ASSIM... max(arg1, arg2,

    *args[, key]) max(iterable, *[, key, default])
 sorted(iterable, *, key=None, reverse=False) 17
  9. A BIBLIOTECA PADRÃO ESTÁ CHEIA DE EXEMPLOS ASSIM... max(arg1, arg2,

    *args[, key]) max(iterable, *[, key, default])
 sorted(iterable, *, key=None, reverse=False) sum(iterable, /, start=0) 18
  10. 20

  11. VECTOR: OPERADOR [ ] — 1ª VERSÃO C/ MENSAGEM ESPECÍFICA

    27 TypeError: key must be index or slice
  12. VECTOR: OPERADOR [ ] — 2ª VERSÃO 28 TypeError: 'tuple'

    object cannot be interpreted as an integer
  13. VECTOR: OPERADOR [ ] — TYPEVAR 30 quando key é

    uma slice,
 o resultado tem o
 mesmo tipo de self
  14. VECTOR: OPERADOR [ ] — COM ANOTAÇÕES 31 quando key

    SupportsIndex, o resultado é um float
  15. DOUBLE: A SOLUÇÃO 36 Definição do protocolo Repeatable exige método

    __mul__, que: • aceita self e um int;
 • devolve algo do mesmo tipo de self
  16. DOUBLE: A SOLUÇÃO 37 Assinatura de double:
 • aceita um

    x que seja Repeatable
 • devolve resultado do mesmo tipo de x
  17. 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. 46
  18. 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. 47 “objeto semelhante a pato”
 (duck-like object) é um
 TIPO ESTRUTURAL
  19. 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. 48 “objeto semelhante a pato”
 (duck-like object) é um
 TIPO ESTRUTURAL Marreco é um 
 TIPO NOMINAL
  20. QUATRO ABORDAGENS PARA TIPOS 49 TIPOS ESTRUTURAIS TIPOS NOMINAIS VERIFICAÇÃO

    DINÂMICA (durante a execução) VERIFICAÇÃO ESTÁTICA (antes da execução) tipagem
 pato
  21. QUATRO ABORDAGENS PARA TIPOS 50 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
  22. QUATRO ABORDAGENS PARA TIPOS 51 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
  23. QUATRO ABORDAGENS PARA TIPOS 52 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...