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()

questionAnswers(2)

yourAnswerToTheQuestion