Pregunta

Todas las funciones integradas de Python son subclases de object y me encuentro con muchas clases definidas por el usuario que también lo son.¿Por qué?¿Cuál es el propósito de la clase? object?Es sólo una clase vacía, ¿verdad?

¿Fue útil?

Solución

En resumen, libera ponis mágicos.

Durante mucho tiempo, Python 2.2 y versiones anteriores utilizaron "clases de estilo antiguo".Eran una implementación particular de clases y tenían algunas limitaciones (por ejemplo, no se podían subclasificar tipos integrados).La solución para esto fue crear un nuevo estilo de clase.Pero hacer esto implicaría algunos cambios incompatibles con versiones anteriores.Entonces, para asegurarse de que el código escrito para clases de estilo antiguo aún funcione, el object La clase se creó para actuar como una superclase para todas las clases de nuevo estilo.Entonces, en Python 2.X, class Foo: pass creará una clase de estilo antiguo y class Foo(object): pass creará una nueva clase de estilo.

En más detalle, ver Guido Unificando tipos y clases en Python 2.2.

Y, en general, es una buena idea adquirir el hábito de hacer todas tus clases con un estilo nuevo, porque algunas cosas (el @property decorador es uno que me viene a la mente) no funcionará con clases de estilo antiguo.

Otros consejos

Respuesta corta: object la subclasificación efectivamente hace que un nuevo estilo clase (nota que esto es innecesario, ya automática en Python 3.x)

Para la diferencia entre las clases y las clases new style old style: ver este stackoverflow cuestionar . Para la historia completa: ver este bonito valoración crítica sobre los tipos de Python y objetos

Tiene que ver con el "nuevo estilo" de clases. Puede leer más sobre esto aquí: http://docs.python.org/ tutorial / classes.html # múltiple herencia y también aquí: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

Utilización de las clases de nuevo estilo le permitirá utilizar "de Python más reciente, versátil características como __slots__, descriptores, propiedades y __getattribute __ ()."

derecho, pero marca la clase como un href="http://www.python.org/doc/newstyle/" rel="nofollow noreferrer"> clase nuevo estilo object porque cuesta poco y futuro-pruebas de su código.

La versión corta es que las clases clásicas, que no necesitan una superclase, tenían limitaciones que no podía ser trabajado en todo sin romper un montón de código antiguo. Así que crearon el concepto de clases de nuevo estilo que subclase de object, y ahora se pueden hacer cosas interesantes como definir las propiedades, y la subclasificación dict ya no es un ejercicio de dolor y extraños insectos.

Los detalles están en la sección 3.3 de la documentación de Python: Nuevo- estilo y clases clásicos.

Python 2.2 introdujo "nuevas clases de estilo" que tenía una serie de características adicionales relativas a las viejas clases de estilo, que no lo hicieron objeto de subclase. Las subclases objeto fue la forma elegida para indicar que su clase debe ser una nueva clase de estilo, no un estilo antiguo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top