"Quand on dit "tout est objet" (comme en Python), a-t-il, en effet, dire que "tout est de première classe"?"
Oui.
Tout en Python est un bon objet. Même les choses qui sont "de type primitif" dans d'autres langues.
Vous trouvez qu'un objet comme 2
a fait un assez riche et sophistiqué de l'interface.
>>> 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 de première classe de l'objet en Python, il y a relativement peu obscur des cas particuliers.
En Java, par exemple, il y a des types primitifs (int, bool, double, char) qui ne sont pas des objets. C'est pourquoi Java est d'introduire Integer, Boolean, Double et le Caractère de première classe de types. Cela peut être difficile d'enseigner à des débutants, il n'est pas évident la raison pour laquelle à la fois un type primitif et une classe d'exister côte à côte.
Cela signifie aussi qu'une classe de l'objet est, en lui-même -- un objet. C'est à partir de C++, où les classes ne sont pas toujours d'avoir une existence distincte au moment de l'exécution.
Le type d' 2
est le type 'int'
de l'objet, qui a des méthodes, attributs et un type.
>>> type(2)
<type 'int'>
Le type d'un type comme int
est le type 'type'
objet. Cela a des méthodes et des attributs, aussi.
>>> type(type(2))
<type 'type'>