Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es el papel de las metaclases en Python?

¿Cuál es el papel de las metaclases en Python?

Las metaclases son clases de clases. Las clases definen el comportamiento de las instancias (es decir, los objetos) de la clase, mientras que las metaclases definen el comportamiento de la clase. Las clases son instancias de metaclases. Si bien puedes usar objetos invocables arbitrarios como metaclases en Python (como lo demuestra Jerub), un mejor enfoque es convertirlos en clases reales. type es una metaclase común en Python. Es imposible recrear tipos similares usando únicamente Python, pero Python hace un poco de trampa. Para crear su propia metaclase en Python, todo lo que necesita hacer es escribir el tipo de subclase. Las metaclases se utilizan más comúnmente como fábricas de clases.

clase Al ejecutar esta declaración, Python primero ejecuta el cuerpo de la declaración de clase como un bloque de código ordinario. El espacio de nombres generado (diccionario) conserva los atributos de clases futuras. Las metaclases se identifican observando la clase base de la clase que se va a procesar (la metaclase heredada), el atributo __metaclass__ (si lo hay) de la clase que se va a procesar o la variable global __metaclass__. Luego se crea una instancia de la metaclase llamando al nombre de la clase, la clase base y las propiedades. Sin embargo, las metaclases en realidad definen el tipo de clase, no sólo su fábrica, por lo que puedes hacer más con las metaclases. Por ejemplo, puedes definir métodos regulares en una metaclase. Estos métodos de metaclase son similares a los métodos de clase en que se pueden invocar en la clase sin una instancia, pero también se diferencian de los métodos de clase en que no se pueden invocar en instancias de la clase. type.__subclasses__() es un ejemplo de un método de metaclase de tipo. También puede definir métodos "mágicos" ordinarios como __add__, __iter__ y __getattr__ para realizar o cambiar el comportamiento de la clase.