Recientemente descubrí metaclases en python.¿Alguien usa meta-meta-classes/meta-meta-meta-classes en Python/otros lenguajes?
Básicamente una metaclase en python es una clase que crea una clase. Hay muchas razones útiles por las que desearía hacer esto: cualquier clase de inicialización de clase, por ejemplo. Registrar clases en fábricas, validación compleja de atributos, alterar cómo funciona la herencia, etc. Todo esto no solo es posible sino también simple.
Pero en python, las metaclases también son clases simples. Así, empecé a preguntarme si la abstracción sería útil ir más alto, y me parece que se puede y que:
- una metaclase corresponde ao implementa un papel en un patrón (como en los lenguajes de patrones GOF).
- un meta-metaclase es el patrón en sí (si permitimos que para crear tuplas de clases que representan papeles abstractos, en lugar de una sola clase)
- un meta-meta-metaclase es una fábrica patrón, que corresponde a las agrupaciones de patrones GOF, por ejemplo Creational, Structural, Behavioral. Una fábrica donde podría describir un caso de cierto tipo de problema y le daría un conjunto de clases que lo resolvió.
- meta-meta-metaclass (hasta donde pude), es una fábrica fábrica de patrones, una fábrica en la que quizás podría describir el tipo de su problema y le daría una fábrica de patrones para pedir.
He encontrado algunas cosas sobre esto en línea, pero sobre todo no muy útiles. Un problema es que diferentes idiomas definen las metaclases de forma ligeramente diferente.
¿Alguien más ha usado metaclasses como este en python/en otro lugar, o visto esto usado en la naturaleza, o pensado en eso? ¿Cuáles son los análogos en otros idiomas? P.ej. en C++, ¿a qué profundidad puede llegar la recursión de la plantilla?
Me gustaría investigar más.
Actualización: ha pasado mucho tiempo. Usé mucho las metaclases y creo que fueron útiles, pero luego me salí completamente de las metaclases. La razón es que después de examinar la interacción del contexto del dominio y algunas investigaciones de IBM, me di cuenta de que el concepto de que el tipo es intrínseco a un objeto es en sí mismo defectuoso. En cambio, el tipo depende de "a quién preguntar". Para un pájaro, un árbol es solo un lugar para construir un nido. Para un maderero, una fuente de ingresos, para un tasador de impuestos, tal vez otra cosa. –