Este rápido consejo ofrece una breve descripción de lo que entendemos por metaclase en Python y muestra algunos ejemplos del concepto..
Antes de profundizar en este artículo, debo señalar un punto importante sobre las clases en Python que nos facilita comprender el concepto de metaclases..
Si ha usado un lenguaje de programación que no sea Python, lo más probable es que el concepto que entendió sobre las clases sea una forma de crear nuevos objetos. Esto también es cierto en Python, pero Python incluso da un paso más: las clases adicionales también se consideran objetos!
Entonces, si creaste la siguiente clase en Python:
clase myClass (objeto): pase
Esto simplemente significa que un objeto con el nombre mi clase
ha sido creado en la memoria. Dado que este objeto puede crear nuevos objetos, se considera un clase. Esto significa que podemos aplicar operaciones de objetos en clases en Python, ya que las clases son objetos en sí mismos.
Por lo tanto, podemos realizar operaciones en clases como asignar la clase a una variable, de la siguiente manera:
class_object = myClass () imprime class_object
Que devuelve:
<__main__.myClass object at 0x102623610>
Incluso puedes pasar la clase. mi clase
como parámetro a un método, como sigue:
def class_object (object): print object class_object (myClass)
Lo que devuelve el siguiente resultado:
Además de otras operaciones, normalmente puede aplicar objetos..
Tal vez te has encontrado con el tipo
palabra clave en Python? Lo más probable es que lo haya usado para verificar el tipo de algún objeto, como se muestra en los siguientes ejemplos:
tipo de impresión ('abder') tipo de impresión (100) tipo de impresión (100.0) tipo de impresión (int)
En cuyo caso obtendrías la siguiente salida:
Mirando la salida, todo parece bastante claro hasta que llegas al tipo tipo
. Para ver qué significa esto, volvamos a nuestra clase que definimos al principio de este artículo:
clase myClass (objeto): pase
Ahora, haz lo siguiente:
tipo de impresión (myClass)
¿Cuál sería el resultado de esta declaración? Sorprendentemente será:
Entonces, podemos concluir que el tipo de clases en Python es tipo
!
¿Cuál es la relación entre un tipo
y un metaclase
? Bueno un tipo
es un metaclase
, siempre que el predeterminado metaclase
es tipo
. Sé que esto podría ser confuso, especialmente que tipo
se puede usar para devolver la clase de algún objeto como se muestra arriba, pero esto se debe a la compatibilidad con versiones anteriores en Python. Así que, si escribes:
tipo de impresión (tipo)
Conseguirás:
Lo que significa que un tipo
es un tipo
!
El termino metaclase
simplemente significa algo usado para crear 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. Así, tipo
es considerado un metaclase
desde la instancia de un tipo
es una clase.
Por ejemplo, cuando mencionamos la siguiente declaración anterior:
class_object = myClass ()
Esto simplemente construye un objeto / instancia de la clase mi clase
. En otras palabras, usamos una clase para crear un objeto..
De la misma manera, cuando hicimos lo siguiente:
clase myClass (objeto): pase
los metaclase
fue utilizado para crear la clase mi clase
(que se considera una tipo
). Entonces, como el objeto es una instancia de una clase, una clase es una instancia de una clase metaclase
.
En esta sección, vamos a ver cómo podemos usar un metaclase
para crear una clase, en lugar de utilizar el clase
Enunciado como vimos en el tutorial de clases y objetos. Como vimos anteriormente, el predeterminado metaclase
es tipo
. Por lo tanto, podemos usar la siguiente declaración para crear una nueva clase:
new_class = type ('myClass', (), )
Si desea simplificar las cosas, puede asignar el mismo nombre de clase mi clase
al nombre de la variable.
El diccionario Aquí se utiliza para definir los atributos de la clase. Entonces, teniendo la siguiente declaración:
myClass = type ('myClass', (), 'a': True)
Es parecido a:
clase myClass (objeto): a = Verdadero
Digamos que creamos la clase. mi clase
como sigue:
clase myClass (objeto): __metaclass__ = myMetaClass pass
En este caso, la creación de la clase se producirá utilizando myMetaClass
en lugar de tipo
, como sigue:
myClass = myMetaClass (className, bases, dictionary)
Si quieres tener control sobre cómo crear y inicializar una clase después de su creación, simplemente puede utilizar la metaclase __nuevo__
método y __en eso__
constructor, respectivamente. Así que cuando myMetaClass
arriba se llama, esto es lo que sucederá detrás de escena:
myClass = myMetaClass .__ new __ (myMetaClass, nombre, bases, diccionario) myMetaClass .__ init __ (myClass, nombre, bases, diccionario)
No quiero alargar este consejo rápido, pero para resumir, podemos concluir que un metaclase
Se usa en Python para crear una clase. Es decir, la instancia de un metaclase
es una clase Si desea profundizar en las metaclases, puede consultar este tutorial..