tipo de clase en Python
-
28-09-2019 - |
Pregunta
¿Por qué si lo hago:
class C(): pass
type(C())
Tengo: <type 'instance'>
, pero si lo hago:
class C(object): pass
type(c())
Tengo:? <class '__main__.c'>
La primera no es muy userfull
Solución
Busca la diferencia entre las clases de estilo antiguo y nuevo estilo. Los primeros son el valor predeterminado, y el segundo hereda explícitamente de objeto.
Todos los objetos de estilo antiguo se llevaron a cabo con el incorporado en la instancia de tipo. El hecho de que siguen siendo el defecto y sus restos de tipo 'ejemplo' es el resultado de las precauciones retro-compatibilidad.
Esto se extrae de la documentación de Python (http://docs.python.org/reference/datamodel.html)
3.3. Un nuevo estilo de clásicos y clases de clases e instancias vienen en dos sabores: viejo estilo (o clásico) y nuevo estilo.
Hasta Python 2.1, clases de estilo antiguo eran el único sabor a disposición de la usuario. El concepto de clase (estilo antiguo) no está relacionado con el concepto de tipo: si x es una instancia de un viejo estilo clase, entonces X. clase designa el clase de x, pero el tipo (x) es siempre . Esto refleja la hecho de que todas las instancias de estilo antiguo, independientemente de su clase, son implementado con un único incorporado tipo, llamado ejemplo.
se introdujeron clases de estilo nuevo en Python 2.2 para unificar las clases y tipos. Una clase de nuevo estilo no es ni más ni menos de un tipo definido por el usuario. Si x es una instancia de una clase de nuevo estilo, a continuación, tipo (x) es típicamente la misma que x>. class (aunque esto no es una clase de nuevo estilo - garantizado ejemplo está permitido para anular el valor devuelto para x. clase ).
La principal motivación para introducir clases de nuevo estilo es proporcionar una modelo de objetos unificada con una completa meta-modelo. También cuenta con un número de beneficios prácticos, como la capacidad subclase más tipos incorporados, o la introducción de “descriptores”, que permiten a las propiedades calculadas.
Por razones de compatibilidad, las clases son Todavía viejo estilo por defecto. Nuevo estilo las clases se crean mediante la especificación otra clase de nuevo estilo (es decir, un tipo) como clase padre, o el “alto nivel escribir”objeto si hay otro padre es necesario. El comportamiento del nuevo estilo clases difiere de la de estilo antiguo clases en una serie de importantes detalles además de qué tipo () devoluciones. Algunos de estos cambios son fundamental para el nuevo modelo de objetos, como la forma son métodos especiales invocado. Otros son “soluciones” que podrían no estar en vigor antes de problemas de compatibilidad, como el orden de resolución método en el caso de herencia múltiple.
Si bien esta objetivos manuales para proporcionar la amplia cobertura de Python mecánicas de clase, que pueden estar todavía carente de algunas áreas cuando se trata de su cobertura de las clases de nuevo estilo. Por favor mira http://www.python.org/doc/newstyle/ de fuentes de información adicional.
clases de estilo antiguo se eliminan en Python 3.0, dejando sólo la semántica del nuevo estilo classes.of clases de nuevo estilo.
Otros consejos
Sinceramente, no creo que una respuesta corta es en orden aquí. Te aconsejo que empiece a leer acerca de las clases de tipo unificación / nuevo estilo de Python aquí: http://www.python.org/doc/newstyle/