2012-04-06 15 views
22

Cuando creo un módulo con su exclusivo contenido:clase Nombre de clase (objeto), ¿qué tipo de palabra es 'objeto' en Python?

class Classname(randomobject): 
    pass 

Y trato de ejecutar el archivo .py del módulo al intérprete dice que randomobject no está definido.

Pero cuando lo haga:

class Classname(object): 
    pass 

El módulo funciona muy bien. Entonces, si object no es una palabra clave, ¿qué es?

+0

Aquí hay otra pregunta que aborda el identificador 'objeto' de Python: [clase python hereda el objeto] (http://stackoverflow.com/q/4015417/404469). – gary

+2

Para el registro, http://stackoverflow.com/q/4015417/404469 no es un duplicado. Se trata del mecanismo de la herencia; esta pregunta se trata y tiene múltiples respuestas sobre la estructura sintáctica de lo que está sucediendo. – Marcin

Respuesta

11

object es una variable (global). Por defecto, está vinculado a una clase incorporada que es la raíz de la jerarquía de tipos.

(Esto lleva a la interesante propiedad de que puede tomar cualquier tipo incorporado, y usar la propiedad __bases__ para alcanzar el tipo llamado objeto).

Todo lo que está incorporado que no es una palabra clave u operador es un identificador.

+0

Gracias. Supongo que no puede ver el código que se le asigna a esta variable global. – Bentley4

+0

@ Bentley4 No sé a qué te refieres. – Marcin

+0

Lo siento. En /usr/lib/python2.7 puede encontrar los módulos de python estándar. Al abrir los archivos python usted mismo puede ver las asignaciones de variables, cuerpos de las clases y funciones, etc. de los módulos que no puede ver mediante la función de ayuda. ¿Hay alguna forma de acceder al módulo __builtin__ y mirar la variable objeto en ese módulo? – Bentley4

5

object es un identificador que hace referencia a un tipo incorporado.

A diferencia de muchos otros idiomas, no hay tipos primitivos en Python. Todo es un objeto, incluidos todos los tipos de datos.

No estoy seguro de por qué esperaba heredar de randomobject para funcionar.

+0

Quizás no estaba del todo claro; Quise decir que 'object' no tiene una significación sintáctica o semántica especial en Python, por ejemplo,' int' en Java. – Taymon

+0

Estrictamente, el "tipo de palabra que el objeto es" es una variable, por esa razón. – Marcin

+1

Respuesta actualizada para reflejar esto. – Taymon

0

object es la clase base de la que se hereda al crear una clase de nuevo estilo en Python 2.

+0

No es necesario hacer esto en Python 3.x, sin embargo. Las clases de nuevo estilo son las predeterminadas. –

+0

Gracias por el recordatorio. – Dikei

+0

En Python 3, todas las clases aún heredan del objeto. Además, "el tipo de palabra que es ese objeto" es un identificador. – Marcin

Cuestiones relacionadas