Los atributos de acceso en los literales funcionan en todos los tipos, pero no en `int`; ¿por qué? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué es "1.real" un error de sintaxis pero "1 .real" válido en Python? 3 respuestas

He leído que todo en Python es un objeto, y como tal comencé a experimentar con diferentes tipos e invocando__str__ en ellos, al principio me sentía muy emocionado, pero luego me confundí.

>>> "hello world".__str__()
'hello world'
>>> [].__str__()
'[]'
>>> 3.14.__str__()
'3.14'
>>> 3..__str__()
'3.0'
>>> 123.__str__()
  File "<stdin>", line 1
    123.__str__()
              ^
SyntaxError: invalid syntax
Por quesomething.__str__() trabajar para "todo" ademásint?Es123 no unobjeto de tipoint?

Respuestas a la pregunta(4)

Su respuesta a la pregunta