3. Globalcode – Open4education
Mocks
Mock: Objeto que “imita” o comportamento de um objeto
“real” para fins de teste.
MagicMock: Nome da classe do pacote unittest.mock que
implementa os métodos mágicos especiais em Python.
TechMock: Projeto criado para fins de estudo e para essa
apresentação.
4. Globalcode – Open4education
Design Patterns
Solução geral para um problema que ocorre com
frequência dentro de um determinado contexto no
projeto de software.
Se só você faz é gambiarra, se muita gente faz é
design pattern.
5. Globalcode – Open4education
Monkey Patch
Técnica de substituir um objeto em tempo de
execução.
>>> aux = True
>>> True = False
>>> False = aux
>>> False
True
>>> True
False
ATENÇÃO: Esse exemplo é ilustrativo e só funciona com Python2, não use em produção!
6. Globalcode – Open4education
Context Manager
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())
7. Globalcode – Open4education
Decorators
Forma de “envelopar” a chamada de um método
dentro de outro, para fazer algo 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 TDC”)
Isso é um decorator
Vai chamar <function meu_print at
0x7f46d229e598>
Oi TDC
Chamou a função
8. Globalcode – Open4education
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']
Esse comportamento pode ser comparado com uma Interface em linguagens estáticas:
Se um objeto implementa a interface pato, pra mim é um pato.
>>> t = tuple(l)
>>> type(t)
<type 'tuple'>
>>> ["t{}".format(i) for i in t]
['t1', 't2', 't3']
9. Globalcode – Open4education
Magic Special Methods
Python oferece vários métodos especiais que são
invocados conforme algumas operações são
acionadas.
Atributos: __getattr__, __setattr__, __delattr__, ...
Classe como método: __call__
Dicionários: __getitem__, __setitem__, __delitem__, ...
Matemática: __add__, __sub__, __div__, …