un lenguaje generalmente se construye en tres capas.
cuando proporciona un programa a un idioma, primero tiene que "leer" el programa. luego construye lo que ha leído en algo con lo que puede trabajar. y finalmente ejecuta esa cosa como "un programa" y (con suerte) imprime un resultado.
El problema aquí es que la primera parte de python, la parte que lee programas, está confundida. es confusa, porque no es lo suficientemente inteligente como para saber la diferencia entre
1.234
y
1.letters
lo que parece estar sucediendo es que se piensa que estaba tratando de escribir un número como 1.234
pero cometió un error y letras mecanografiadas en su lugar (!).
así que esto no tiene nada que ver con lo que 1
"realmente es" y si es o no un objeto. todo ese tipo de lógica ocurre en la segunda y tercera etapas que describí anteriormente, cuando Python intenta compilar y luego ejecutar el programa.
lo que has descubierto es solo una extraña (¡pero interesante!) Arruga en la forma en que python lee los programas.
[lo llamaría un error, pero probablemente sea así por una razón. resulta que algunas cosas son difíciles de leer para las computadoras. python probablemente está diseñado para que sea fácil (rápido) que la computadora lea programas. arreglar este "error" probablemente haría que la parte de python que lee programas sea más lenta o más complicada. entonces es probable que sea una compensación.]
es un error de sintaxis. el compilador no entiende la sintaxis la sintaxis del lenguaje (su gramática) no está definida para que pueda escribir un nombre de método después de un entero. esto no es un error cuando el programa se ejecuta; es de * antes * de que el programa se ejecute. el analizador no puede entender lo que ha tipeado. –
@andrewcooke - Creo que la pregunta (muy bien demostrado por cierto) es por qué * * no puede manejar el analizador esto? Puede acceder a los atributos/métodos en literales de otros tipos (considere el común '" ".join (...)', ¿por qué no los enteros? – mgilson
lo hace de hecho, pero pensé que la principal preocupación de la persona que hacía la pregunta era que de alguna manera esto significaba que los enteros no eran objetos (ver http://stackoverflow.com/questions/11801549/python-data-types-are-classes-or-data-structures del mismo usuario). De ahí mi énfasis en cómo esto es de una capa separada anterior. –