"Quando alguém diz" tudo é um objeto "(como em Python), ele realmente quer dizer que" tudo é de primeira classe "?"
Sim.
Tudo em Python é um objeto adequado. Até coisas que são "tipos primitivos" em outros idiomas.
Você descobre que um objeto como 2
na verdade tem uma interface bastante rica e 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__']
Como tudo é um objeto de primeira classe em Python, há relativamente poucos casos especiais obscuros.
Em Java, por exemplo, existem tipos primitivos (int, bool, double, char) que não são objetos adequados. É por isso que o Java tem que introduzir Integer, Boolean, Double e Character como tipos de primeira classe. Isso pode ser difícil de ensinar para iniciantes - não é óbvio por que tanto um tipo primitivo quanto uma classe precisam existir lado a lado.
Isso também significa que a classe de um objeto é - ela mesma - um objeto. Isso é diferente do C ++, onde as classes nem sempre têm uma existência distinta no tempo de execução.
O tipo de 2
é o type 'int'
objeto, que possui métodos, atributos e um tipo.
>>> type(2)
<class 'int'>
O tipo de um tipo interno como int
é o type 'type'
objeto. Isso também tem métodos e atributos.
>>> type(type(2))
<class 'type'>