2010-04-06 14 views

Respuesta

45

En resumen, establece ponies mágicos gratis.

En versión larga, Python 2.2 y versiones anteriores usaban "clases de estilo anterior". Eran una implementación particular de clases, y tenían algunas limitaciones (por ejemplo, no se podían subclasificar tipos incorporados). La solución para esto fue crear un nuevo estilo de clase. Pero hacer esto implicaría algunos cambios incompatibles hacia atrás. Por lo tanto, para asegurarse de que el código escrito para clases de estilo antiguo aún funcione, la clase object se creó para actuar como una superclase para todas las clases de estilo nuevo. Por lo tanto, 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 una versión más larga, consulte el número Unifying types and classes in Python 2.2 de Guido.

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

+0

@thetaiko enumera algunas otras cosas de estilo nuevo que son buenas de conocer. –

+2

Para la posteridad, vale la pena mencionar que las clases de nuevo estilo son las predeterminadas en Python3 y la subclasificación de 'object' no es necesaria. – slightlynybbled

3

Correcto, pero marca la clase como una clase new-style. Las clases recientemente desarrolladas deben usar la base object porque cuesta poco y a prueba de futuro su código.

0

La versión corta es que las clases clásicas, que no necesitaban una superclase, tenían limitaciones que no se podían solucionar sin romper muchos códigos antiguos. Así que crearon el concepto de clases de nuevo estilo que subclase de object, y ahora puedes hacer cosas geniales como definir propiedades, y la subclase dict ya no es un ejercicio de dolor y errores extraños.

Los detalles están en la sección 3.3 de la documentación de Python: New-style and classic classes.

0

Python 2.2 introduced "new style classes" que tenía una serie de características adicionales relativas a las viejas clases de estilo, que no lo hicieron objeto de subclase. El objeto de las subclases fue la forma elegida para indicar que su clase debería ser una nueva clase de estilo, no una de estilo antiguo.

Cuestiones relacionadas