2012-07-07 14 views
7

Stavo leggendo il codice sorgente di collections.py ieri.Motivi per rinominare la proprietà _property

Nella funzione namedtuple, viene generata una stringa template e quindi exec in uno spazio dei nomi temporaneo.

Nel namespace dict, property è stato rinominato in _property e tuple in _tuple.

Mi chiedo quale sia la ragione di questo. Quali problemi questo rinominare aiuta a evitare?

risposta

9

In generale, i nomi di sottolineatura vengono talvolta utilizzati nella libreria standard per mantenere pulito uno spazio dei nomi.

Nel caso di _tuple, era necessario perché si è permesso di usare "tuple" come un nome di campo:

>>> Example = namedtuple('Example', ['list', 'tuple', 'property']) 
>>> e.list 
[10, 20, 30] 
>>> e.tuple 
(40, 50, 60) 
>>> e.property 
'Boardwalk' 
+2

@JBernardo, sai che RH è uno degli sviluppatori principali Python giusto? Voglio dire, si, potrebbe_ sbagliare su questo, ma sospetto che stia parlando per esperienza. – senderle

+4

È vero, sono l'autore del codice per * namedtuple * :-) –

+0

Quindi non sono lontano dicendo che voglio "con", "come" e "eccetto" come nomi di campo allora? :) –

0

evita parola chiave conflitti.

dire che abbiamo avuto una lista immaginaria di ['when', 'who', 'why', 'where', 'with']

es. non è possibile digitare my_name_tuple.with senza che l'interprete se ne vada.

Leggere attentamente i documenti sul namedtuple e si dovrebbe ottenere.

+0

In Python2.7 puoi impostare 'rename = True' quindi nomi non validi come 'with' saranno sostituiti con qualcosa come' _4'. Andando o meno, questo non influenzerà l'istruzione come 'x = property (...)' che viene eseguita nel contesto della definizione di classe. – satoru

Problemi correlati