python object deprecated future-proof new-style-class

¿Cuál es el propósito de subclasificar la clase "objeto" en Python?



object deprecated (6)

Todos los complementos de Python son subclases de object y encuentro muchas clases definidas por el usuario que también lo son. ¿Por qué? ¿Cuál es el propósito del objeto de clase? Es solo una clase vacía, ¿verdad?


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


En resumen, establece ponies mágicos gratis.

En Long, Python 2.2 y versiones anteriores usaban "clases de estilo antiguo". 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 garantizar que el código escrito para las clases de estilo antiguo aún funcione, la clase de object se creó para actuar como una superclase para todas las clases de estilo nuevo. Entonces, en Python 2.X, la class Foo: pass creará una clase de estilo antiguo y class Foo(object): pass creará una nueva clase de estilo.

En más tiempo, vea los tipos de Unificación de Guido y las clases en Python 2.2 .

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


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 propiedades de definición, y la subclasificación de dict ya no es un ejercicio de dolor y errores extraños.

Los detalles se encuentran en la sección 3.3 de los documentos de Python: clases de estilo nuevo y clásica.




Python 2.2 introdujo "nuevas clases de estilo" que tenían una serie de características adicionales relativas a las antiguas clases de estilo que no subclasificaban el objeto. 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.