typestar

Una metaclase en Python

La clase de una clase: corre al definirla y puede reescribirla.

class Mayusculas(type):
    def __new__(mcls, nombre, bases, espacio_nombres):
        constantes = {k: v for k, v in espacio_nombres.items()
                     if k.isupper() and isinstance(v, str)}
        for clave, valor in constantes.items():
            espacio_nombres[clave] = valor.upper()
        espacio_nombres["CONSTANTS"] = tuple(sorted(constantes))
        return super().__new__(mcls, nombre, bases, espacio_nombres)


class Configuracion(metaclass=Mayusculas):
    THEME = "monokai"
    MODE = "editor"
    other = "queda igual"


print(Configuracion.THEME, Configuracion.MODE, Configuracion.other)
print(Configuracion.CONSTANTS, type(Configuracion).__name__)

Cómo funciona

  1. __new__ en la metaclase recibe el espacio de nombres en construcción.
  2. Recurre a ella solo cuando __init_subclass__ no alcanza.
  3. type(cls) te dice qué metaclase creó una clase.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
597
Tokens
148
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 81 segundos.

Escribe este fragmento

Paso 3 de 3 en Maquinaria de clases; paso 37 de 53 en Python pythónico.

← Anterior Siguiente →