¿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.
Respuesta corta: el object
subclases lo convierte en una clase de estilo nuevo (tenga en cuenta que esto no es necesario dado que es automático en Python 3.x)
Para la diferencia entre las new style
clases de new style
y las old style
clases de old style
: vea esta pregunta de . Para la historia completa: vea este agradable escrito sobre los tipos y objetos de Python .
Tiene que ver con el "nuevo estilo" de clases. Puedes leer más sobre esto aquí: http://docs.python.org/tutorial/classes.html#multiple-inheritance y también aquí: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
El uso de clases de estilo nuevo le permitirá usar las funciones más nuevas y versátiles de Python, como __slots__, descriptors, properties, y __getattribute __ ().
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.