"Wenn man sagt" alles ist ein Objekt "(wie in Python), meint er dann tatsächlich, dass" alles erstklassig ist "?"
Ja.
Alles in Python ist ein richtiges Objekt. Sogar Dinge, die in anderen Sprachen "primitive Typen" sind.
Sie finden, dass ein Objekt wie 2tatsächlich eine ziemlich reichhaltige und ausgefeilte Oberfläche hat.
>>> 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__']
Da in Python alles ein erstklassiges Objekt ist, gibt es relativ wenige undurchsichtige Sonderfälle.
In Java gibt es beispielsweise primitive Typen (int, bool, double, char), die keine richtigen Objekte sind. Deshalb muss Java Integer, Boolean, Double und Character als erstklassige Typen einführen. Anfängern kann dies schwer beizubringen sein - es ist nicht offensichtlich, warum sowohl ein primitiver Typ als auch eine Klasse nebeneinander existieren müssen.
Dies bedeutet auch, dass die Klasse eines Objekts - selbst - ein Objekt ist. Dies unterscheidet sich von C ++, wo die Klassen zur Laufzeit nicht immer eine bestimmte Existenz haben.
Der Typ von 2ist das type 'int'Objekt, das Methoden, Attribute und einen Typ enthält.
>>> type(2)
<class 'int'>
Der Typ eines eingebauten Typs wie intist das type 'type'Objekt. Dies hat auch Methoden und Attribute.
>>> type(type(2))
<class 'type'>