v'è una limitazione sulla sintassi di accesso agli attributi, in Python (almeno nella realizzazione CPython 2.7.2):Perché i nomi attribuiti non possono essere parole chiave Python?
>>> class C(object): pass
>>> o = C()
>>> o.x = 123 # Works
>>> o.if = 123
o.if = 123
^
SyntaxError: invalid syntax
La mia domanda è duplice:
- C'è una ragione fondamentale perché usare i nomi degli attributi delle parole chiave Python (come in
o.if = 123
) è vietato? - È/dove è documentata la restrizione di cui sopra sui nomi degli attributi?
avrebbe senso fare o.class = …
, in uno dei miei programmi, e io sono un po 'deluso di non essere in grado di farlo (o.class_
avrebbe funzionato, ma non sembra così semplice).
PS: Il problema è ovviamente che if
e class
sono parole chiave Python. La domanda è perché utilizzando parole chiave come nomi di attributi sarebbe vietato (non vedo alcuna ambiguità nell'espressione o.class = 123
) e se questo è documentato.
Perché parser è più semplice quando le parole chiave sono sempre parole chiave e non contestuali. Quindi il codice non arriva nemmeno al punto in cui c'è l'accesso agli attributi, è semplicemente un errore di sintassi sul livello di analisi (perché "if" fa parte della grammatica e non appare mai in questo posto). È lo stesso nella maggior parte delle lingue e la grammatica della lingua è la documentazione per questo. –
Inoltre, 'cls' viene in genere utilizzato per i nomi che contengono riferimenti a classi. –
Anche se si dispone di un parser che è in grado di distinguere le parole chiave da variabili/nomi di funzioni, non è garantito che si possa mettere in ombra l'altro in un caso d'angolo. È molto più facile mantenere la sanità mentale se basta semplicemente vietare l'uso di alcune dozzine di nomi. –