In che modo Django trasforma le stringhe dei nomi dei campi nelle variabili dei nomi dei campi?

1

Sono molto nuovo in Python e (provenendo da Java) sto cercando di pensare in modo "pitonico". Ho difficoltà a capire come Django trasforma un nome di funzione (o variabile) dato in stringa alla funzione effettiva.

Esempio del tutorial di Django: Se diamo:

list_display = ('question', 'pub_date', 'was_published_recently')

Django legge la funzione e alcune proprietà correlate dal codice:

def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

Quindi, la mia domanda: come si trasforma la stringa nel nome della funzione effettiva?

    
posta recluze 03.01.2013 - 15:31
fonte

1 risposta

7

Python ha molti modi per trasformare le stringhe in oggetti. I più importanti sono:

  • Accesso agli attributi con getattr() , che ti consente di tradurre foo.bar in getattr(foo, 'bar') .

  • Accesso al dizionario, mapping[key] . Quasi tutto in Python può essere ridotto ai dizionari; per impostazione predefinita, le istanze di classe memorizzano le informazioni in una mappatura chiamata __dict__ , ad esempio, quindi instance.__dict__[key] funziona in molti casi. Gli spazi dei nomi dei moduli utilizzano anche una mappatura del genere.

    Le funzioni predefinite vars() , locals() e globals() tutti restituiscono un mapping di spazio dei nomi.

Se ti interessa l'introspezione di Python, potresti voler studiare il modello di dati Python , e prendere guarda anche inspect library .

    
risposta data 03.01.2013 - 17:15
fonte

Leggi altre domande sui tag