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

Não é Magia, é Tecnologia

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Não é Magia, é Tecnologia

Trabalhando com testes unitários você provavelmente já usou mocks e disse: "Uau! Isso é muito mágico!".

Alterar o comportamento de objetos é muito legal, mas está bem longe de ser magia, então a proposta dessa palestra é explorar os conceitos e design patterns implementados pelos mocks e ressaltar os pontos fortes desse aspecto dinâmico de Python.

Avatar for Rafael Reimberg Lima

Rafael Reimberg Lima

October 21, 2018

More Decks by Rafael Reimberg Lima

Other Decks in Technology

Transcript

  1. Pessoal: Rafael Reimberg Lima, 28, Paulistano, Casado. Formação: Análise e

    Desenvolvimento de Sistemas pelo IFSP / Engenharia de Software pela PUC-SP Profissional: 11 anos em TI, atualmente Engenheiro de Software no Mercado Bitcoin Eventos/Comunidade: Python Brasil (aqui :P), Python Sudeste, TDC, DockerCon, grupos/listas do Telegram, Google e Facebook. Bio
  2. Monkey Patch Técnica de modificar o comportamento de um objeto

    em tempo de execução. >>> aux = True >>> True = False >>> False = True >>> print True True >>> print False False ATENÇÃO: Esse exemplo é ilustrativo e só funciona com Python2, não use em produção!
  3. Context Managers Definição de contextos de execução em determinado bloco

    com a keyword with. arq = open(‘arquivo’) print(arq.readlines()) arq.close() OU with open('arquivo') as arq: print(arq.readlines())
  4. Decorators Definição de uma inner function para adicionar comportamentos antes

    e/ou depois de sua execução. def grava_log_acesso(func): def decorator(*args, **kwargs): print(“Isso é um decorator”) print( “Vai chamar {}”.format( repr(func))) result = func( *args, **kwargs) print(“Chamou a função”) return result return decorator @grava_log_acesso def meu_print(texto): print(texto) >>> meu_print(“Oi PyBR2018”) Isso é um decorator Vai chamar <function meu_print at 0x7f46d229e598> Oi PyBR2018 Chamou a função
  5. Duck Typing Se algo se comporta como um pato, pra

    mim é um pato. >>> l = [1, 2, 3] >>> type(l) <type 'list'> >>> ["l{}".format(i) for i in l] ['l1', 'l2', 'l3'] >>> t = tuple(l) >>> type(t) <type 'tuple'> >>> ["t{}".format(i) for i in t] ['t1', 't2', 't3'] Esse comportamento pode ser comparado com uma Interface em linguagens estáticas: Se um objeto implementa a interface pato, vou tratá-lo como um pato.
  6. Magic Special Methods Os métodos dunder (double under) são invocados

    por operadores matemáticos, palavras chave da linguagem ou mesmo pelas sintaxes de acesso à elementos. Exemplos: • Atributos: __getattr__, __setattr__, __delattr__, ... • Classe como método: __call__ • Dicionários: __getitem__, __setitem__, __delitem__, ... • Matemática: __add__, __sub__, __div__, …