"Quando si dice" tutto è un oggetto "(come in Python), significa davvero che" tutto è di prima classe "?"
Sì.
Tutto in Python è un oggetto appropriato. Anche cose che sono "tipi primitivi" in altre lingue.
Scoprite che un oggetto come in 2
realtà ha un'interfaccia abbastanza ricca e sofisticata.
>>> 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__']
Poiché tutto è un oggetto di prima classe in Python, ci sono relativamente pochi casi speciali oscuri.
In Java, ad esempio, ci sono tipi primitivi (int, bool, double, char) che non sono oggetti propri. Ecco perché Java deve introdurre Integer, Boolean, Double e Character come tipi di prima classe. Questo può essere difficile da insegnare ai principianti - non è ovvio perché sia un tipo primitivo che una classe debbano esistere fianco a fianco.
Significa anche che la classe di un oggetto è - di per sé - un oggetto. Questo è diverso dal C ++, in cui le classi non hanno sempre un'esistenza distinta in fase di esecuzione.
Il tipo di 2
è l' type 'int'
oggetto, che ha metodi, attributi e un tipo.
>>> type(2)
<class 'int'>
Il tipo di un tipo incorporato come int
è l' type 'type'
oggetto. Questo ha anche metodi e attributi.
>>> type(type(2))
<class 'type'>