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

¿Fue útil?

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/

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