„Kiedy ktoś mówi„ wszystko jest przedmiotem ”(jak w Pythonie), czy rzeczywiście ma na myśli, że„ wszystko jest najwyższej klasy ”?
Tak.
Wszystko w Pythonie jest właściwym obiektem. Nawet rzeczy, które są „pierwotnymi typami” w innych językach.
Okazuje się, że taki obiekt 2
ma w rzeczywistości dość bogaty i wyrafinowany interfejs.
>>> 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__']
Ponieważ w Pythonie wszystko jest pierwszorzędnym obiektem, jest stosunkowo mało niejasnych przypadków specjalnych.
Na przykład w Javie istnieją prymitywne typy (int, bool, double, char), które nie są właściwymi obiektami. Dlatego Java musi wprowadzić liczby całkowite, logiczne, podwójne i znakowe jako typy pierwszej klasy. To może być trudne do nauczenia dla początkujących - nie jest oczywiste, dlaczego zarówno prymitywny typ, jak i klasa muszą istnieć obok siebie.
Oznacza to również, że klasa obiektu jest - sama w sobie - obiektem. Różni się to od C ++, gdzie klasy nie zawsze mają wyraźne istnienie w czasie wykonywania.
Typem 2
jest type 'int'
obiekt, który ma metody, atrybuty i typ.
>>> type(2)
<class 'int'>
Typem typu wbudowanego int
jest type 'type'
obiekt. Ma to również metody i atrybuty.
>>> type(type(2))
<class 'type'>