2012-04-06 10 views
22

Quando creo un modulo con il suo unico contenuto:class Nome classe (oggetto), che tipo di parola è 'oggetto' in Python?

class Classname(randomobject): 
    pass 

E cerco di eseguire il file .py del modulo l'interprete dice che randomobject non è definito.

Ma quando lo faccio:

class Classname(object): 
    pass 

Il modulo funziona bene. Quindi se object non è una parola chiave, allora che cos'è?

+0

Ecco un'altra domanda che si riferisce all'identificatore di oggetto 'Python: [la classe python eredita l'oggetto] (http://stackoverflow.com/q/4015417/404469). – gary

+2

Per la cronaca, http://stackoverflow.com/q/4015417/404469 non è un duplicato. Riguarda il meccanismo dell'ereditarietà; questa domanda riguarda, e ha più risposte, la struttura sintattica di ciò che sta accadendo. – Marcin

risposta

11

object è una variabile (globale). Di default è associato a una classe built-in che è la radice della gerarchia di tipi.

(Questo porta alla proprietà interessante che è possibile utilizzare qualsiasi tipo incorporato e utilizzare la proprietà __bases__ per raggiungere il tipo chiamato oggetto).

Tutto quello che non è una parola chiave o l'operatore è un identificatore.

+0

Grazie. Immagino tu non possa vedere il codice che cosa viene assegnato a questa variabile globale? – Bentley4

+0

@ Bentley4 Non so cosa intendi. – Marcin

+0

Mi dispiace. In /usr/lib/python2.7 puoi trovare i moduli python standard. Aprendo i file Python puoi vedere assegnazioni di variabili, corpi delle classi e funzioni ecc. Dei moduli che non puoi vedere usando la funzione di aiuto. C'è un modo per accedere al modulo __builtin__ e guardare la variabile oggetto in quel modulo? – Bentley4

5

object è un identificatore che fa riferimento a un tipo predefinito.

A differenza di molti altri linguaggi, in Python non esistono tipi primitivi. Tutto è un oggetto, inclusi tutti i tipi di dati.

Non sono sicuro del motivo per cui ci si aspetta di ereditare da randomobject per funzionare.

+0

Forse non ero del tutto chiaro; Intendevo dire che 'object' non ha uno speciale significato sintattico o semantico in Python come, ad esempio,' int' fa in Java. – Taymon

+0

Strettamente, il "tipo di parola che oggetto è" è una variabile, per questo motivo. – Marcin

+1

Risposta aggiornata per riflettere questo. – Taymon

0

object è la classe base da cui si eredita quando si crea un classe di nuovo stile in Python 2.

+0

Tuttavia, non è necessario farlo in Python 3.x. Le classi di nuovo stile sono quelle predefinite. –

+0

Grazie per il promemoria. – Dikei

+0

In Python 3, tutte le classi continuano ad ereditare dall'oggetto. Inoltre, "il tipo di parola che l'oggetto è" è un identificatore. – Marcin

Problemi correlati