En Python, una definición de clase (es decir, el cuerpo de una clase) se denomina un objeto
En realidad, esto todavía se llama una clase en Python.Es por eso que se define así:
class Foo(object):
pass
La palabra clave class
se utiliza porque el resultado todavía se llama una clase.
La palabra object
está entre paréntesis para mostrar que Foo se deriva de la clase llamada object
. No se confunda: cualquier clase existente podría usarse aquí; más de uno, de hecho.
La razón por la que normalmente se derivan las clases de object
es un accidente histórico, pero probablemente valga un detalle. La implementación de objetos original de Python trató las clases definidas por el usuario y los tipos incorporados como tipos de cosas ligeramente diferentes. Luego, el diseñador del lenguaje decidió unificar estos dos conceptos. Como resultado, las clases derivadas de object
(o de un descendiente de object
) se comportan de forma ligeramente diferente a las clases que son no derivadas de object
y se llaman clases de estilo nuevo. clases de estilo antiguo, por el contrario, fueron los definidos como esto:
class Foo:
pass
class Bar(Foo):
pass
Nota éstos no heredan de object
o de cualquier otra cosa que se hereda de object
. Esto los hace clases de estilo antiguo.
Al trabajar con Python 2.x, sus clases casi siempre deben heredar de object
, ya que los objetos de estilo nuevo son más fáciles de usar en varias formas pequeñas pero importantes.
Para confundir aún más las cosas, en Python 3.0 y posterior, no hay clases antiguas, por lo que no tiene que derivar explícitamente de object
. En otras palabras, all las clases anteriores serían clases de estilo nuevo en Python 3.x.
Ahora, de vuelta a la materia en cuestión. Las clases son objetos porque todo es un objeto en Python. Listas, diccionarios, enteros, cadenas, tuplas ... todos estos son objetos, y también lo son los componentes básicos de los programas de Python: módulos, funciones y clases. Puede crear una clase usando la palabra clave class
y luego pasarla a una función, modificarla, etc. (Para completar, también puede crear una clase usando la función type()
.)
Una clase es una plantilla para construir objetos , que se conocen como instancias . Esta parte ya lo sabes. Crear instancias de objetos similares a llamar a una función, pasando de los valores iniciales y otros parámetros:
mylist = list("abc") # constructs ["a", "b", "c"]
Detrás de las escenas, esto crea una instancia, a continuación, llama al método de la nueva instancia __init__()
inicializarlo. Como todo es un objeto en Python, las instancias de una clase también son objetos.
Una última cosa que quizás quieras saber es que así como las clases son plantillas para construir objetos, entonces es posible tener plantillas para construir clases. Estos se llaman metaclases . La metaclase base se llama type
(es decir, una clase ordinaria de estilo nuevo es una instancia de type
).
(Sí, este es el mismo type
que mencioné anteriormente se puede utilizar para crear clases, y la razón por la que puede llamarlo para crear clases es porque es una metaclase.)
para crear su propia metaclase, que derivarla de type
así:
class mymeta(type):
pass
metaclases son un tema bastante avanzado Python, así que no voy a entrar en lo que se podría utilizar para o cómo hazlo, pero deberían dejar claro hasta qué punto Python toma el concepto de "todo es un objeto".
¿Está refiriéndose a la clase base python 'object'? – juanchopanza
No. Solo el objeto normal contra instancia – Jibin