«Когда кто-то говорит, что« все является объектом »(как в Python), действительно ли он имеет в виду, что« все первоклассно »?»
Да.
Все в Python - правильный объект. Даже вещи, которые являются «примитивными типами» в других языках.
Вы обнаружите, что такой объект, как на 2
самом деле, имеет довольно богатый и сложный интерфейс.
>>> 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__']
Поскольку в Python все является первоклассным объектом, неясных особых случаев относительно мало.
В Java, например, есть примитивные типы (int, bool, double, char), которые не являются правильными объектами. Вот почему Java должна представить Integer, Boolean, Double и Character в качестве типов первого класса. Этому может быть сложно научить новичков - не очевидно, почему и примитивный тип, и класс должны существовать бок о бок.
Это также означает, что класс объекта сам является объектом. Это отличается от C ++, где классы не всегда существуют отдельно во время выполнения.
Тип 2
- это type 'int'
объект, у которого есть методы, атрибуты и тип.
>>> type(2)
<class 'int'>
Тип встроенного типа int
- это type 'type'
объект. У этого также есть методы и атрибуты.
>>> type(type(2))
<class 'type'>