resueltos orientado objetos objeto instanciar importar funciones ejercicios ejemplo curso clases clase python inheritance

orientado - ¿Deberían todas las clases de Python extender el objeto?



objetos en python (5)

En Python 2, no heredar de un object creará una clase de estilo antiguo, que, entre otros efectos, hace que el type proporcione resultados diferentes:

>>> class Foo: pass ... >>> type(Foo()) <type ''instance''>

vs.

>>> class Bar(object): pass ... >>> type(Bar()) <class ''__main__.Bar''>

Además, las reglas para la herencia múltiple son different en formas que ni siquiera trataré de resumir aquí. Toda la buena documentación que he visto sobre MI describe las clases de nuevo estilo.

Finalmente, las clases antiguas han desaparecido en Python 3, y la herencia del object ha vuelto implícita. Por lo tanto, siempre prefiera nuevas clases de estilo a menos que necesite compatibilidad con versiones anteriores de software antiguo.

He encontrado que ambos de los siguientes trabajos:

class Foo(): def a(self): print "hello" class Foo(object): def a(self): print "hello"

¿Deberían todas las clases de Python extender el objeto? ¿Hay algún problema potencial con la no extensión del objeto?


En Python 3 puedes crear una clase de tres maneras diferentes e internamente todas son iguales (ver ejemplos). No importa cómo se crea una clase, todas las clases en Python 3 heredan de una clase especial llamada objeto . El objeto de clase es una clase fundamental en python y proporciona mucha funcionalidad, como métodos de doble guión bajo, descriptores, método super (), método property (), etc.

Ejemplo 1.

class MyClass: pass

Ejemplo 2

class MyClass(): pass

Ejemplo 3.

class MyClass(object): pass


En Python 3, las clases amplían el object implícitamente, ya sea que lo diga usted mismo o no.

En Python 2, hay clases de estilo antiguo y nuevo . Para indicar que una clase es de estilo nuevo, debe heredar explícitamente del object . Si no, se usa la implementación antigua.

Por lo general, desea una clase de estilo nuevo. Heredar del object explícitamente.


Sí, todas las clases Python deben extender (o más bien subclase, este es Python aquí) objeto. Si bien normalmente no se producirán problemas graves, en algunos casos (como en el caso de los árboles de herencia múltiple) esto será importante. Esto también garantiza una mejor compatibilidad con Python 3.


en python3 no hay diferencia, pero en python2 el object que no se extiende le da una clase de estilo antiguo; te gustaría usar una clase de estilo nuevo sobre una clase de estilo antiguo.