2013-02-26 7 views

risposta

4

Viene utilizzato da application.handle() (che a sua volta chiama application._delegate()) per convertire la classe del gestore da una stringa all'oggetto classe stesso. Source code here.

Ad esempio, nello snippet di codice sopra, urls = ('/', 'index') è la mappatura da URL a classe-stringa. Quindi web.application necessita del tuo globals() per poter cercare la stringa 'index' e ottenere la classe stessa.

In realtà penso che questo sia un design un po 'non Pythonic. Perché non passare direttamente in classe? Penso che web.py supporti anche questo approccio. Tuttavia, ritengo che le lezioni siano state eseguite come stringhe, quindi il riavvio automatico è più semplice. Il codice di autoregolazione utilizza pesantemente lo fvars.

Re locals(): a livello di modulo, locals() in realtà non ha senso, ma restituisce lo stesso dizionario come globals(), ed è per questo che avrebbe funzionato.

+0

Questa sembra una spiegazione ragionevole. Tuttavia, la ricerca mi sembra davvero strana; se si passa un nome di classe completo, perché si dovrebbe passare anche un dizionario? Forse supporta entrambi i casi (ad esempio nomi locali e un dittato o nomi completi e un ditt vuoto). –

+0

@ AndréCaron, web.py deve essere in grado di cercare il nome della classe da qualche parte, da qui il dizionario globale. Non può cercare il nome della classe nei suoi globali, ha bisogno dell'app della tua. –

+0

Certo che può, ha solo bisogno di risolvere il nome puntato come altri framework Python. –