Python · Avançado · Inglês · Técnico
dunder init subclass
Gancho __init_subclass__ chamado na classe base toda vez que uma subclasse é definida. Permite registrar ou validar subclasses sem precisar de metaclass.
Onde usar
Substitui a metaclass em plugins e registros automáticos, algo comum em frameworks. Em code review, é preferido por ser bem mais simples de entender e de combinar.
Em código
class Plugin:
registro = []
def __init_subclass__(cls, **kw):
super().__init_subclass__(**kw)
Plugin.registro.append(cls)
class Csv(Plugin): pass
print(Plugin.registro[0].__name__) # CsvExemplos
We register every plugin in dunder init subclass.
Registramos todo plugin no dunder init subclass.
Dunder init subclass replaced our old metaclass.
O dunder init subclass substituiu a nossa antiga metaclass.
Cuidado
Ele roda quando a subclasse é criada, não quando uma instância é criada; não confunda com __init__.
Sinônimos
gancho de subclasse