Función decoradora de Python llamada en tiempo de compilación
Espero que alguien familiarizado con los procedimientos de compilación / ejecución de Python pueda aclarar mi pregunta sobre cómo Python compila las funciones de decorador.
Dentro de mi código de muestra, he incluido una declaración de impresión de prueba en el decorador "writeit" justo antes de que se defina el cierre de logtofile. Si ejecuta el código completo que he proporcionado, se llama la declaración de impresión de "prueba" en writeit para cada decorador @writeit definido en la clase de Cliente, antes de que se use writeit.
¿Por qué se llama logtofile en tiempo de compilación? ¿Podría alguien explicar este comportamiento?
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()