# data[].attributes.attachment_caption
En pocas palabras, una metaclase define el comportamiento de una clase. Una clase regular define cómo se comporta un objeto o una instancia de una clase.

# data[].attributes.body
Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Una metaclase se utiliza en la programación orientada a objetos (POO) y normalmente se la considera una clase de clases. Como la mayoría de la metainformación, la metaclase funciona detrás del programa y el usuario nunca la ve. Una metaclase puede modificar información de la clase y puede vincularse a una o varias clases, según la estructura de codificación.

# data[].attributes.body
Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Para que lo comprendas mejor, un ejemplo de clase abstracta sería una llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar, frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y que se comportan de forma totalmente distinta.

Por lo tanto, una clase abstracta no representa algo concreto, y tampoco puede ser instanciada (no se puede crear un Objeto a partir de ella) pero sí es posible crear otras clases en base a su definición.

# data[].attributes.body
Clases abstractas:
Podemos pensar en las clases abstractas como una anotación y en cierto modo como si de una lista de la compra se tratase. En la vida real solemos hacer breves anotaciones de tareas pendientes sin entrar en descripciones detalladas o en cómo realizar cada una de ellas. Se trata de no olvidarnos de nada y evitar hacer borrón y cuenta nueva o volver sobre nuestros pasos más adelante organizando nuestro tiempo.

Así en programación las clases abstractas funcionan como una clase que declara la existencia de métodos pero no su implementación. Eso es algo que haremos después en las diferentes subclases derivadas de la clase abstracta. Una clase abstracta puede contener métodos no abstractos pero al menos uno de los métodos sí debe serlo.

Metaclases:
Cómo funcionan las metaclases en Python. Programación en Castellano. (programacion.net)

# data[].attributes.attachment_link.readable_text
Este artículo te proporcionará una breve descripción de lo que entendemos por una metaclase en Python y te mostrará algunos ejemplos de este concepto. Antes de introducirnos de lleno, debo señalar un punto importante sobre las clases en Python que hará que nos sea más sencillo comprender el concepto de metaclases.

¿Es una clase, un objeto en Python?

Si has programado ya en un lenguaje de programación que no sea Python, el concepto que entenderás de clases, probablemente sea el de una vía para crear nuevos objetos. Esto también es así en Python, pero Python incluso lo lleva un paso más lejos, ya que los objetos, ¡también se consideran clases!

Por lo tanto, si has creado la siguiente clase en Python:

class myClass(object):
    pass

Simplemente significa que un objeto con el nombre myClass ha sido creado en la memoria. Puesto que este objeto es capaz de crear nuevos objetos, se le considera una clase. Esto significa que podemos aplicar las operaciones de objetos en clases en Python, ya que las clases son objetos en si mismos.

Es por eso que podemos hacer operaciones en clases como, asignar una clase a una variable, de la siguiente manera:

class_object = myClass()
print class_object

Lo cual devolvería:

< __main__.myClass object at 0x102623610 >

Incluso puedes pasar la clase myClass como un parámetro a un método, tal que así:

def class_object(object):
    print object

class_object(myClass)

Lo que devolvería la siguiente salida:

< class '__main__.myClass' >

Metaclases

Seguramente ya te hayas topado con la palabra clave type en Python. Lo más probable es que la hayas utilizado para comprobar el tipo de un objeto, como puedes ver en los siguientes ejemplos:

print type('jorge')
print type(100)
print type(100.0)
print type(int)

En cuyo caso obtendrás las siguientes salidas:

< type 'str' >
< type 'int' >
< type 'float' >
< type 'type' >

En cuanto a las salidas, todo parece bastante claro hasta llegar al tipo type. Para ver lo que esto puede significar, volvamos a la clase que hemos definido al principio de este artículo:

class myClass(object):
    pass

Ahora, hacemos lo siguiente:

print type(myClass)

¿Qué obtenemos de esta sentencia? Asombrosamente:

< type 'type' >

Por lo tanto, podemos concluir que el tipo de las clases de Python es type.

¿Qué relación hay entre un tipo y una metaclase? Bueno, un tipo es una metaclase, siempre que la metaclase por defecto sea un tipo. Sé que esto puede ser confuso. Ese tipo se puede utilizar para devolver la clase de un objeto tal y como se ve más arriba, pero esto es debido a la compatibilidad con versiones anteriores de Python. Por lo tanto, si escribes:

print type(type)

Obtendrás:

< type 'type' >

Evidenciando que un tipo es un type.

El término metaclase (metaclass) simplemente significa algo así como algo que se ha creado para crear otras clases. En otras palabras, es la clase de una clase, lo que significa que la instancia de una clase en este caso es una clase. Type se considera una metaclase desde que la instancia de un tipo es una clase.

Por ejemplo, cuando hemos mencionado la siguiente sentencia más arriba:

class_object = myClass()

Esto simplemente construye un objeto/instancia de la clase myClass. En otras palabras, utilizamos una clase para crear un objeto.

De la misma forma, cuando hacemos:

class myClass(object):
    pass

Hemos utilizado la metaclase para crear la clase myClass (que se considera un tipo). Por lo tanto, al igual que el objeto es una instancia de una clase, una clase es una instancia de una metaclase.

Utilizando metaclases para crear una clase

En esta sección, veremos cómo podemos utilizar una metaclase para crear una clase, en lugar de utilizar la declaración de clase como hemos visto en el anterior tutorial sobre clases y objetos. Como vimos anteriormente, la metaclase por defecto es de tipo type. Por lo tanto, podemos utilizar la siguiente instrucción para crear una nueva clase:

new_class = type('myClass',(),{})

Si quieres hacer las cosas más simples, puedes asignar el mismo nombre de clase myClass al nombre de la variable.

Hemos utilizado un diccionario{} para definir los atributos de la clase. Por lo tanto, tendría la siguiente declaración:

myClass = type('myClass',(),{'a':True})

Similar a:

class myClass(object):
    a = True

Fuente: Abder-Rahman Ali

# data[].attributes.attachment_link.description
Este artículo te proporcionará una breve descripción de lo que entendemos por una metaclase en Python y te mostrará algunos ejemplos de este concepto. Antes de introducirnos de lleno, debo señalar un punto importante sobre las clases en Python que hará que nos sea más sencillo comprender el concepto de metaclases.

# data[].attributes.body
Abstract Classes

In short, abstract classes are classes that cannot be instantiated. This is the case because abstract classes do not specify the implementation of features. Rather, you only specify the method signatures and property types (sometimes), and every child class must provide its own implementation. Note that it is still possible to provide some implementation. For example, an abstract class can implement a default constructor.

Metaclasses

As you have just seen, Python’s implementation of abstract classes differs from what you see in other popular languages. This is because abstraction is not part of the language’s grammar. Instead, it is implemented as a library. The next logical question is “Can you do something similar yourself, purely in Python?” And the answer is yes.

# data[].attributes.body
-Una clase abstracta tiene como objetivo definir una función / comportamiento común que múltiples subclases pueden heredar sin tener que implementar toda la clase abstracta. En Python, podemos crear una clase abstracta basada en diferentes formas basadas en la versión de Python.
-En programación orientada a objetos, una metaclase es una clase cuyas instancias son clases. En otras palabras, como los objetos son instancias de una clase, las clases son instancias de una metaclase. No todos los lenguajes orientados a objetos soportan metaclases.

# data[].attributes.body
Las clases abstractas son algo abstracto, no representan algo específico y las podemos usar para crear otras clases. No pueden ser instanciadas, por lo que no podemos crear nuevos objetos con ellas. Las clases abstractas no especifican la implementación de características. Más bien, solo especifica las firmas del método y los tipos de propiedad (a veces), y cada clase secundaria debe proporcionar su propia implementación. Todavía es posible proporcionar alguna implementación. Por ejemplo, una clase abstracta puede implementar un constructor predeterminado.
Las metaclases son clases para clases. Las metaclases proporcionan planos para la creación de clases. Cada clase tiene una metaclase por defecto (se llama type).

# data[].attributes.body
Las clases abstractas

Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Para que lo comprendas mejor, un ejemplo de clase abstracta sería una llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar, frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y que se comportan de forma totalmente distinta (el proceso de arrancarlos no se realiza siguiendo los mismos pasos, unos tienen que despegar y vuelan como los aviones, otros se sumergen para desplazarse por debajo del agua como los submarinos, cada uno de ellos necesita ser frenado de distinto modo...).

Así pues, ya que una clase abstracta no representa algo concreto tampoco puede ser instanciada (no se puede crear un Objeto a partir de ella) pero sí es posible crear otras clases en base a su definición.

Las metaclases

En pocas palabras, una metaclase define el comportamiento de una clase. Una clase regular define cómo se comporta un objeto o una instancia de una clase.

En Python, las metaclases están prefabricadas e implícitas; esto significa que se crea una metaclase en segundo plano al crear una clase.

# data[].attributes.body
En la programación orientada a objetos , una metaclase es una clase cuyas instancias son clases. Así como una clase ordinaria define el comportamiento de ciertos objetos, una metaclase define el comportamiento de ciertas clases y sus instancias.

No todos los lenguajes de programación orientados a objetos admiten metaclases. Entre los que lo hacen, varía la medida en que las metaclases pueden anular cualquier aspecto dado del comportamiento de clase.

Las metaclases se pueden implementar haciendo que las clases sean ciudadanos de primera clase , en cuyo caso una metaclase es simplemente un objeto que construye clases. Cada lenguaje tiene su propio protocolo de metaobjetos , un conjunto de reglas que gobiernan cómo interactúan los objetos, las clases y las metaclases.

# data[].attributes.body
Metaclases:
La metaprogramación en Python se basa en un nuevo tipo especial de clase que se llama metaclase. Este tipo de clase, en resumen, contiene las instrucciones sobre la generación de código detrás de escena que desea que tenga lugar cuando se está ejecutando otra pieza de código.

Clase abstracta:
Un concepto importante en programación orientada a objetos es el de las clases abstractas. Unas clases en las que se pueden definir tanto métodos como propiedades, pero que no pueden ser instancias directamente. Solamente se pueden usar para construir subclases. Permitiendo así tener una única implementación de los métodos compartidos, evitando la duplicación de código. Hoy vamos a ver cómo definir las clases abstractas en Python.

Propiedades:

No puede ser instanciadas, se proporciona una interfaz para las subclases derivadas y se evita la duplicación de código.

No es necesario que tengan una implementación de todos los métodos necesarios. Pudiendo ser estos abstractos. Los métodos abstractos son aquellos que solamente tienen una declaración, pero no una implementación detallada de las funcionalidades

# data[].attributes.body
Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Las metaclases son clases que heredan directamente del tipo. El método que deben implementar las metaclases personalizadas es el método __new__. Los argumentos mencionados en el método __new__ de metaclases se reflejan en el método __new__ de clase de tipo.

# data[].attributes.body
La abstracción de datos es el proceso de ocultar ciertos detalles y mostrar solo la información esencial al usuario.
La abstracción se puede lograr con clases abstractas o interfaces

¿Qué es una clase abstracta?
Es una clase restringida que no se puede usar para crear objetos (para acceder a ella, se debe heredar de otra clase).

¿Qué es una metaclase?
En la programación orientada a objetos, una metaclase es una clase cuya instancia es una clase. Una metaclase define una clase que es una instancia de ella y define además el comportamiento de una instancia de esa clase, al igual que una clase normal define el comportamiento de esa instancia.

# data[].attributes.body
Una clase abstracta es aquella de la que no se pueden declarar instancias, dicho de otra manera no se pueden declarar objetos de una clase abstracta. La finalidad de una clase abstracta es servir como clase base para otras clases a las que generalmente se conoce como clases "concretas"

Una metaclase es una clase cuyas instancias son clases

# data[].attributes.body
Clase abstracta
Una clase abstracta puede considerarse como un modelo para otras clases. Le permite crear un conjunto de métodos que deben crearse dentro de las clases secundarias creadas a partir de la clase abstracta. Una clase que contiene uno o más métodos abstractos se llama clase abstracta.

Metaclase
Una metaclase define el comportamiento de una clase. En Python, las metaclases están prefabricadas e implícitas; esto significa que se crea una metaclase en segundo plano al crear una clase (clase Object).

# data[].attributes.body
Investigar acerca de los conceptos de Clases Abstractas y Metaclases.

# data[].attributes.body
Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Para que lo comprendas mejor, un ejemplo de clase abstracta sería una llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar, frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y que se comportan de forma totalmente distinta (el proceso de arrancarlos no se realiza siguiendo los mismos pasos, unos tienen que despegar y vuelan como los aviones, otros se sumergen para desplazarse por debajo del agua como los submarinos, cada uno de ellos necesita ser frenado de distinto modo...).

En programación orientada a objetos, una metaclase es una clase cuyas instancias son clases. En otras palabras, como los objetos son instancias de una clase, las clases son instancias de una metaclase.

No todos los lenguajes orientados a objetos soportan metaclases. Además, los lenguajes que lo soportan tienen sus propias reglas que definen como los objetos, clases y metaclases interactúan.