"Quand on dit" tout est objet "(comme en Python), veut-il bien dire que" tout est de première classe "?"
Oui.
Tout en Python est un objet approprié. Même les choses qui sont des "types primitifs" dans d'autres langues.
Vous trouvez qu'un objet comme a 2
en fait une interface assez riche et sophistiquée.
>>> 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__']
Parce que tout est un objet de première classe en Python, il existe relativement peu de cas spéciaux obscurs.
En Java, par exemple, il existe des types primitifs (int, bool, double, char) qui ne sont pas des objets appropriés. C'est pourquoi Java doit introduire Integer, Boolean, Double et Character comme types de première classe. Cela peut être difficile à enseigner aux débutants - il n'est pas évident de savoir pourquoi à la fois un type primitif et une classe doivent coexister.
Cela signifie également que la classe d'un objet est - elle-même - un objet. Ceci est différent du C ++, où les classes n'ont pas toujours une existence distincte au moment de l'exécution.
Le type de 2
est l' type 'int'
objet, qui a des méthodes, des attributs et un type.
>>> type(2)
<class 'int'>
Le type d'un type intégré comme int
est l' type 'type'
objet. Cela a également des méthodes et des attributs.
>>> type(type(2))
<class 'type'>