typestar

__init_subclass__ en Python

Un hook que corre al definirse una subclase — un registro sin metaclase.

class Complemento:
    registry = {}

    def __init_subclass__(cls, nombre=None, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.registry[nombre or cls.__name__.lower()] = cls


class Csv(Complemento, nombre="csv"):
    pass


class Json(Complemento):
    pass


print(sorted(Complemento.registry))
print(Complemento.registry["csv"] is Csv)

Cómo funciona

  1. Es implícitamente un classmethod del padre.
  2. Los argumentos con nombre en la sentencia class llegan aquí.
  3. Más barato de leer que una metaclase, y casi siempre suficiente.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
328
Tokens
89
Ritmo de tres estrellas
110 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →