"Cuando uno dice" todo es un objeto "(como en Python), ¿quiere decir que" todo es de primera clase "?"
Si.
Todo en Python es un objeto apropiado. Incluso cosas que son "tipos primitivos" en otros idiomas.
Descubres que un objeto como 2tiene una interfaz bastante rica y sofisticada.
>>> dir(2)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']
Debido a que todo es un objeto de primera clase en Python, hay relativamente pocos casos especiales oscuros.
En Java, por ejemplo, hay tipos primitivos (int, bool, double, char) que no son objetos adecuados. Es por eso que Java tiene que introducir Integer, Boolean, Double y Character como tipos de primera clase. Esto puede ser difícil de enseñar a los principiantes: no es obvio por qué un tipo primitivo y una clase tienen que existir uno al lado del otro.
También significa que la clase de un objeto es, en sí misma, un objeto. Esto es diferente de C ++, donde las clases no siempre tienen una existencia distinta en tiempo de ejecución.
El tipo de 2es el type 'int'objeto, que tiene métodos, atributos y un tipo.
>>> type(2)
<class 'int'>
El tipo de un tipo incorporado como intes el type 'type'objeto. Esto tiene métodos y atributos, también.
>>> type(type(2))
<class 'type'>