MetAclasses son responsables de crear objetos de clase en Python. Así como las clases crean instancias, las metaclassas crean clases. Proporcionan una capa de control sobre el proceso de creación de clases, permitiendo la personalización del comportamiento y los atributos de la clase.
en Python, las clases son objetos que describen el blueprint para crear nuevas instancias o objetos. Esto significa que las clases en sí mismas son instancias creadas a partir de una 'descripción' de la clase utilizando la palabra clave de la clase. Por lo tanto, la siguiente declaración crea un objeto de clase llamado ObjectCreator:
class ObjectCreator(object): pass
ya que las clases son objetos, puede crearlos dinámicamente, incluso en tiempo de ejecución. La función de tipo le permite definir una clase proporcionando su nombre, bases y atributos como argumentos. Devuelve un objeto de clase recién creado.
Foo = type('Foo', (), {'bar': True}) print(Foo) #print(Foo.bar) # True
Ahora, llegamos a metaclasses. Son las 'cosas' que crean estos objetos de clase. Así como las clases crean instancias, las metaclassas crean clases. Son efectivamente las clases detrás de escena que Python usa automáticamente para crear clases definidas utilizando la palabra clave de clase.
en Python 2, puede especificar un atributo __metaclass__ al definir una clase para usar una clase personalizada para crear esa clase. En Python 3, esto ha sido reemplazado por un argumento de palabras clave en la lista de clases base.
# Python 2 class Foo(object, __metaclass__=MyMetaclass): ... # Python 3 class Foo(object, metaclass=MyMetaclass): ...
un metaclass puede modificar la clase que crea, permitiendo el comportamiento de la clase dinámica. Por ejemplo, puede definir un metaclase que convierta automáticamente todos los atributos de clase a uppercase:
class UpperAttrMetaclass(type): def __new__(cls, clsname, bases, attrs): uppercase_attrs = { attr if attr.startswith('__') else attr.upper(): v for attr, v in attrs.items() } return super().__new__(cls, clsname, bases, uppercase_attrs)
entonces, puede usar este metaclase para crear una clase con atributos de uppercase:
class Foo(object, metaclass=UpperAttrMetaclass): bar = 'bip' print(Foo.bar) # 'BIP'
Si bien no necesitas metaclasses, encuentran casos de uso para crear API que abstractan la complejidad de la alteración de la clase detrás de una interfaz simple. Por ejemplo, el ORM de Django usa metaclasses para permitirle definir campos de bases de datos utilizando declaraciones simples como Charfield e Integerfield.
Metaclasses en Python es una herramienta poderosa que le brinda control sobre la creación de clases. Sin embargo, es importante tener en cuenta que son complejos y solo deben usarse cuando sea necesario para evitar complicaciones innecesarias.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3