É hora de falar sobre decorador.
Outro termo-chave em Python, e já vimos decorador antes.
Você se lembra que quando estávamos construindo classes, eu ensinei que havia um método de aula e um método
estático e disse, ei, não se preocupe com isso.
Falaremos sobre isso mais tarde.
Bem, agora este é o aspecto do decorador posterior assim.
Eles tinham o símbolo de arroba e, em seguida, algum tipo de nome o seguindo.
Mas para que possamos entender completamente o que são decoradores, temos que falar sobre funções em Python e por que elas
são tão poderosas.
Isso é o que há de legal no Python, pois as funções do Python são o que chamamos de cidadãos de primeira classe.
Ou seja, eles podem ser transmitidos como variáveis.
Eles podem ser um argumento dentro de uma função.
Eles agem como, bem, variáveis.
Deixe-me mostrar a você, se eu crio uma função halo, que francamente é completamente inútil porque tudo o que ela
faz é dizer olá para.
Se eu fizer isso.
Lembre-se, eu disse que funções são basicamente apenas variáveis em Python.
Novamente, algo que nem sempre é o caso com todas as linguagens de programação.
Então, se eu quiser, posso dizer que Grete é igual a olá.
Então, se eu imprimir Grete.
E eu gerencio isso.
Eu recebo um alô, e se eu apenas passar um alô assim, se eu executar isso?
Bem, eu recebo a localização da função na memória, então eu teria que usar uma grade como esta e executá-la corretamente.
Temos que chamar a função hello.
OK, e se fizermos isso?
E se eu disser deletar?
Olá, um teclado e python que exclui essa função.
O que você acha que acontecerá?
Vamos ver se eu executo isso.
Hmmm, era isso que você esperava?
Você esperava que a ganância ainda funcionasse?
O interessante sobre Python é que eu crio olá e isso agora é criado na memória, quando chegarmos
à linha quatro, digo, ei, saudação vai apontar para olá.
Então, olá ainda pode ser chamado aqui.
Ainda posso dizer olá porque olá é o nome da função que aponta para aquele local na memória.
Mas quando eu deleto hello, tudo o que ele faz é dizer, hey, vou deletar esta função, esta referência de nome a
esta função que está na memória.
No entanto, porque saudar uma outra variável inteira ainda está apontando para esta função.
Vou deletar a palavra hello, então se eu for hello assim.
Vou receber um nome de ar hello não está definido, no entanto.
A grade ainda está apontando na memória para este local, então o Python é inteligente o suficiente para dizer, ei, você me disse
para deletar oi, irei deletar o nome doi, mas não irei deletar a função porque
a ganância ainda é apontando para ele.
Portanto, as funções em Python agem da mesma forma que as variáveis fazem seus cidadãos de primeira classe.
Também podemos passar funções.
Por dentro de argumentos, certo, se eu disser olá e esse olá receber outra função que
chama, digamos.
Funciona assim.
Bem, posso criar uma função de grade, digamos definir grade.
E esta função vai apenas imprimir.
Ainda aqui.
Agora, aqui, se eu chamar oi.
Com.
Grete.
Ou apenas para ficarmos claros, vamos apenas dizer a igual a hello greet, e se eu imprimir um, o que acontecerá?
Isso ainda funciona porque o que acontece é que eu digo, ei, chame a função hello, OK, estou chamando
a função hello com o argumento.
Excelente.
Então vamos aqui e dizemos, ei, execute a função e que função queremos chamar esta função.
Certo, porque temos esses colchetes.
Assim, saltamos para a função que, em nosso caso, é a ganância.
Então vamos até aqui e dizemos, ei, basta imprimir isso, não precisamos chamá-lo aqui porque a função Halo o
chama para nós.
Então, por que acabei de te ensinar tudo isso?
O que isso tem a ver com decoradores de decoradores só é possível por causa dessas
características, dessa capacidade das funções de agirem como variáveis, agirem como cidadãos de primeira classe e python.
E quando começamos a aprender sobre decoradores por baixo do capô, eles estão usando esse poder de funções.
De vez em quando nos próximos vídeos, vamos falar sobre como criar o nosso próprio,
o que eles significam e expandir essa ideia de decorador.
Mas aqui está a forma abreviada do que o decorador faz com que o decorador sobrecarregue nossa função se tivéssemos nossa
função, digamos, olá aqui.
Ao adicionar algum tipo de decorador como este, podemos sobrecarregar nossa função e adicionar funcionalidades extras a ela.
Isso permite que o interpretador Python saiba que quero que esta função hello tenha alguns recursos extras, mas vamos explorar esse
tópico um pouco mais no próximo vídeo.