«Когда кто-то говорит« все является объектом »(как в 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)
<type 'int'>
Тип встроенного типа, например int
, - это type 'type'
объект. Это также имеет методы и атрибуты.
>>> type(type(2))
<type 'type'>