Função de decorador Python chamada em tempo de compilação
Espero que alguém familiarizado com os procedimentos de compilação / tempo de execução do Python possa esclarecer minha dúvida sobre como o Python compila as funções do decorador.
Dentro do meu código de exemplo, incluí uma declaração de impressão de teste no decorador "writeit" logo antes do fechamento do logtofile ser definido. Se você executar o código inteiro que eu forneci, a instrução de impressão "testing" em writeit será chamada para cada decorador @writeit definido na classe Customer - antes que writeit seja usado.
Por que o logtofile é chamado em tempo de compilação? Alguém poderia explicar esse comportamento?
def writeit(func):
print('testing')
def logtofile(customer, *arg, **kwargs):
print('logtofile')
result = func(customer, *arg, **kwargs)
with open('dictlog.txt','w') as myfile:
myfile.write(func.__name__)
return result
return logtofile
class Customer(object):
def __init__(self,firstname,lastname,address,city,state,zipcode):
self._custinfo = dict(firstname=firstname,lastname=lastname,address=address,city=city,state=state,zipcode=zipcode)
@writeit
def setFirstName(self,firstname):
print('setFirstName')
self._custinfo['firstname']=firstname
@writeit
def setLastName(self,lastname):
print('setLastName')
self._custinfo['lastname']=lastname
@writeit
def setAddress(self,address):
print('setAddress')
self._custinfo['address']=address
def main():
cust1 = Customer('Joe','Shmoe','123 Washington','Washington DC','DC','12345')
cust1.setFirstName('Joseph')
cust1.setLastName('Shmoestein')
if(__name__ == '__main__'): main()