registry
util.registry
Registerable
Bases: ABC
Abstract class for base module classes which have class registry.
Usage
from future import annotations ... from typing import Dict ... from .SaigeToolkit.SaigeToolkit.util.registry import Registerable ... ... ... class BaseModule(Registerable): ... registry: Dict[str, BaseModule] ... ... ... class ImplementedModuleA(BaseModule): ... pass ... ... ... class ImplementedModuleB(BaseModule): ... pass ... ... ... print(BaseModule.registry) ... # output ... # {'ImplementedModuleA': main.ImplementedModuleA, ... # 'ImplementedModuleB': main.ImplementedModuleB}
If you want use arbitrary key for registering,
class BaseModule2(Registerable): ... registry: Dict[str, BaseModule2] ... ... ... class ImplementedModule2A(BaseModule2, key="module_2_a"): ... pass ... ... ... print(BaseModule2.registry) ... # output ... # {'module_2_a': main.ImplementedModule2A}
or, define "init_subclass" again.
class BaseModule3(Registerable): ... registry: Dict[str, BaseModule3] ... ... def init_subclass(cls): ... super().init_subclass(key=cls.name.lower()) ... ... class ImplementedModule3A(BaseModule3): ... pass ... ... ... print(BaseModule3.registry) ... # output ... # {'implementedmodule3a': main.ImplementedModule3A}