diff --git a/python.html b/python.html
index fc37630..55e0991 100644
--- a/python.html
+++ b/python.html
@@ -776,8 +776,72 @@ Julio
A idéia dos decorators é cria uma função que altera a funcionalidade
+ de uma função. A forma mais simples de entender decorators é pensar neles como
+ funções que encapsulam callbacks.
+>>> def retrieve(connection):
+>>> # faz algo com a conexão para recuperar dados.
+
Problema: antes de sair executando algo na conexão, tem que ser + verificado se a conexão está ativa.
+ + +Solução menos óbvia: Criar uma função que verifica a conexão e, + se ela estiver ok, chama a função.
+ +
+>>> def retrieve(connection):
+>>> # faz algo com a conexão para recuperar dados.
+>>>
+>>> def update(connection):
+>>> # atualiza algo usando a função
+>>>
+>>> def check(connection, call):
+>>> if not connection.is_connected:
+>>> connection.retry()
+>>> call(connection)
+
+
+ Novo problema: Todo lugar onde antes era chamado retrieve
+ agora precisa ser alterado para check(connection, retrieve)
e
+ todo lungar onde era chamado update
precisa ser alterado para
+ check(connection, update)
.
Solução mais simples: decorators.
+ +
+>>> from functools import wrap
+>>>
+>>> def check(func):
+>>> def check_conn(*args, **kwargs):
+>>> # acha a conexão em args ou kwargs
+>>> if not connection.is_connected:
+>>> connection.retry()
+>>> return func(*args, **kwargs)
+>>> return check_conn
+>>>
+>>> @check
+>>> def retrieve(connection):
+>>> # faz algo com a conexão para recuperar dados
+
+
+ Não precisa alterar nenhuma chamada de retrieve
.