2012-04-06 8 views
22

Wenn ich ein Modul mit alleinigem Inhalt erstellen:Klasse Klassenname (Objekt), welche Art von Wort ist 'Objekt' in Python?

class Classname(randomobject): 
    pass 

Und ich versuche, die Py-Datei des Moduls sagt der Dolmetscher zu laufen, dass randomobject nicht definiert ist.

Aber wenn ich tun:

class Classname(object): 
    pass 

Das Modul läuft gut. Also, wenn object kein Schlüsselwort ist, was ist es dann?

+0

Hier ist eine andere Frage, die den Python 'object' Bezeichner anspricht: [python class erbt Objekt] (http://stackoverflow.com/q/4015417/404469). – gary

+2

Für das Protokoll ist http://Stackoverflow.com/q/4015417/404469 kein Duplikat. Es geht um den Mechanismus der Vererbung; Diese Frage beschäftigt sich mit der syntaktischen Struktur dessen, was vor sich geht. – Marcin

Antwort

11

object ist eine (global) zu schaffen. Standardmäßig ist es an eine integrierte Klasse gebunden, die das Stammverzeichnis der Typhierarchie darstellt.

(Dies führt zu der interessanten Eigenschaft, dass Sie einen beliebigen eingebauten Typ verwenden können, und verwenden Sie die __bases__ -Eigenschaft, um den Typ namens Objekt zu erreichen).

Alles integrierte, das kein Schlüsselwort oder Operator ist, ist ein Bezeichner.

+0

Danke. Ich nehme an, Sie können den Code nicht anzeigen, was dieser globalen Variable zugewiesen ist? – Bentley4

+0

@ Bentley4 Ich weiß nicht, was du meinst. – Marcin

+0

Es tut mir leid. In /usr/lib/python2.7 finden Sie die Standard-Python-Module. Indem Sie die Python-Dateien selbst öffnen, können Sie Variablenzuweisungen, Klassenkörper und Funktionen usw. der Module sehen, die Sie nicht mit der Hilfe-Funktion sehen können. Gibt es eine Möglichkeit, auf das Modul __builtin__ zuzugreifen und die Objektvariable in diesem Modul zu betrachten? – Bentley4

5

object ist ein Bezeichner, der sich auf einen eingebauten Typ bezieht.

Im Gegensatz zu vielen anderen Sprachen gibt es in Python keine primitiven Typen. Alles ist ein Objekt, einschließlich aller Datentypen.

Ich bin mir nicht sicher, warum Sie erwarten, von randomobject zu erben zu arbeiten.

+0

Vielleicht war ich nicht ganz klar; Ich meinte damit, dass "Objekt" in Python keine spezielle syntaktische oder semantische Bedeutung hat, wie etwa "int" in Java. – Taymon

+0

Streng genommen ist die "Art des Wortes, das Objekt ist" eine Variable, aus diesem Grund. – Marcin

+1

Aktualisierte Antwort, um dies zu reflektieren. – Taymon

0

object ist die Basisklasse, von dem Sie erben, wenn eine neuen Stil-Klasse in Python 2. Variable

+0

Dies ist jedoch in Python 3.x nicht erforderlich. New-style-Klassen sind die Standardeinstellung. –

+0

Danke für die Erinnerung. – Dikei

+0

In Python 3 erben immer noch alle Klassen von Objekt. Außerdem ist "die Art des Wortes, das Objekt ist" eine Kennung. – Marcin