¿Qué es una metaclase?

Déjame darte una versión no técnica de metaclases (porque no conozco tu nivel actual):

Para producir artículos en masa, primero creamos un molde con la forma del artículo y luego usamos ese molde para crear objetos duplicados. En lenguaje de programación, las clases se utilizan generalmente para denotar estos moldes de software. Usando el molde o las clases, podemos crear múltiples objetos para almacenar y manipular datos mientras se programa.

En la mayoría de los idiomas, las clases solo describen cómo producir un objeto. Son como un conjunto de instrucciones que no ocupan espacio en la memoria de datos. Pero en python, las clases son un poco más que eso. También son instancias de otro molde. Es decir, a diferencia de la mayoría de los otros idiomas, las clases también son objetos.

El molde del que están hechas las clases se llama metaclases . No mezcle la herencia con metaclases. Cuando hereda una clase, básicamente obtiene los métodos y datos asociados de la clase base. Pero la metaclase es básicamente el conjunto de instrucciones que lo ayudan a crear esa clase. Esto se usa a menudo cuando desea cambiar el comportamiento predeterminado de las clases.

Por ejemplo, cuando desea crear una clase abstracta en python que no puede crear instancias pero solo puede usarse como una clase base, usaría una metaclase ABC.meta. O necesita por alguna razón exótica que todos los atributos de una clase sean MAYÚSCULAS incluso si los definió en minúsculas.

Una metaclase se usa en la programación orientada a objetos y normalmente se considera como una clase de clases. Como la mayoría de la metainformación, la metaclase funciona detrás del programa y nunca es vista por el usuario. Una metaclase puede modificar información de la clase y puede vincularse a una o varias clases, dependiendo de la estructura de codificación. Una metaclase es como un decorador pero para clases. Específicamente, una metaclase es una clase que crea una clase.

Una metaclase define el comportamiento de ciertas clases y sus instancias. No todos los lenguajes de programación orientados a objetos admiten metaclases y algunos solo pueden ofrecer codificación de metaobjetos en formatos avanzados.

En casi todos los tipos de codificación, la metacodificación es una etiqueta o línea de código que funciona en el programa, pero el usuario no la ve abiertamente. La metainformación está por encima del código y puede modificar información o agregarla al programa sin interferir directamente con el programa. En la programación orientada a objetos, se usa una metaclase para tomar una clase y modificar su comportamiento.

Nota: Esta respuesta solo se refiere a la delimitación de metaclases , no a su uso.

La noción de una metaclase generalmente aparece en lenguajes de programación orientados a objetos que están sujetos al principio de “las clases son objetos “. La definición clásica dice: Una metaclase es una clase cuyas instancias son clases (ver Wikipedia). Por lo general, hay una metaclase incorporada, generalmente llamada Class , que es circular: es igual a la clase en sí misma (o, en otras palabras, es una instancia directa de sí misma). Otras metaclases son exactamente los descendientes de herencia (subclases) de la metaclase incorporada. En Python, un lenguaje con quizás el soporte más fuerte para metaclases, la clase circular se llama type .

Existe un modelo matemático que delimita las metaclases como objetos del meta nivel 2 o superior. Las clases ordinarias residen en el metalevel 1 y los objetos ordinarios (las “instancias terminales”) forman el metalevel 0. Vea ¿Qué es una Metaclase? para más detalles (también en PDF).

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.

Metaclass 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, la medida en que las metaclases pueden anular cualquier aspecto dado del comportamiento de la clase varía. 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 idioma tiene su propio protocolo de metaobjetos, un conjunto de reglas que gobiernan cómo interactúan los objetos, las clases y las metaclases.