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

Tipagem Pato, agora com tipos estáticos

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Luciano Ramalho

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