hay una restricción sobre la sintaxis de acceso de atributo, en Python (al menos en la implementación CPython 2.7.2):¿Por qué los nombres de atributos no son palabras clave de Python?
>>> class C(object): pass
>>> o = C()
>>> o.x = 123 # Works
>>> o.if = 123
o.if = 123
^
SyntaxError: invalid syntax
Mi pregunta es doble:
- ¿Hay una razón fundamental ¿por qué está prohibido el uso de nombres de atributos de palabra clave Python (como en
o.if = 123
)? - ¿Dónde/dónde se documenta la restricción anterior en los nombres de atributos?
Tendría sentido hacer o.class = …
, en uno de mis programas, y estoy un poco decepcionado por no ser capaz de hacerlo (o.class_
funcionaría, pero no se ve tan simple).
PS: El problema es obviamente que if
y class
son palabras clave de Python. La pregunta es por qué usando palabras clave como nombres de atributos estaría prohibido (no veo ninguna ambigüedad en la expresión o.class = 123
), y si esto es documentado.
Porque el analizador es más simple cuando las palabras clave son siempre palabras clave y no contextuales. Entonces el código ni siquiera llega al punto donde hay acceso de atributos, es simplemente un error de sintaxis en el nivel de análisis sintáctico (porque 'si' es parte de la gramática y nunca aparece en este lugar). Es lo mismo en la mayoría de los idiomas, y la gramática del lenguaje es la documentación para eso. –
Además, 'cls' se usa generalmente para nombres que contienen referencias a clases. –
Incluso si tiene un analizador que puede distinguir las palabras clave de los nombres de variables/funciones, no es garantía de que uno pueda sombrear al otro en un caso de esquina. Es mucho más fácil mantener la cordura si simplemente prohíbe el uso de unas pocas docenas de nombres. –