
Brahian Sebastian Cleves Romero
Preguntatengo una duda, como hace la variable password de la función protected_func(password) para llegar a ser el argumento de la función wrapper?

Alejandro Cuello Maure
Lo que hace por debajo no es llamar la funcion "protected_func", porque esta no tiene parametros. Si no usar el "nombre" de la funcion "protected_func" para invocar al metodo decorador
# por eso se pone con @ el metodo decorador encima de la funcion que queremos decorar @mi_metodo_decorador def protected_func(): print('Contraseña correcta')
y los parametros que le pasemos no son para "protected func" si no para la funcion interna que esta adentro funcion decoradora.
Viendolo de otra forma es como llamar la funcion decoradora por un "apodo". Este apodo es el nombre de la funcion que queremos decorar (en este caso "protected_func") pero los argumentos van a la funcion que estamos "apodando" o sea en este caso para la funcion "wrapper".
password = input('Escribe la contraseña: ') protected_func(password) # lo que hicimos es "apodar" el metodo decorador (wrapper) y le pasamos el parametro que necesita.

Ariel Ricardo Cornejo Jiménez
viendo el codigo lo que entiendo yo (es mi opinion habria que verificar si es asi). quiza la duda es porque la funcion protected_func() no recibe ningun parametro al definirla pero abajo cuando la llamas si le pasas el parametro password. Entonces cuando el codigo se va a ejecutar, antes de realizar la funcion, el decorador anticipa tanto la funcion como el parametro y lo encapsula convirtiendolos en el parametro del decorador para asi tener acceso a la funcion como tal y al parametro... haciendo que wrapper tenga acceso a password