Registrable is a “mixin” for endowing
any base class with a named registry for its subclasses and a decorator
for registering them.
Any class that inherits from
Registrablegains access to a named registry for its subclasses. To register them, just decorate them with the classmethod
After which you can call
BaseClass.list_available()to get the keys for the registered subclasses, and
BaseClass.by_name(name)to get the corresponding subclass. Note that the registry stores the subclasses themselves; not class instances. In most cases you would then call
from_params(params)on the returned subclass.
You can specify a default by setting
BaseClass.default_implementation. If it is set, it will be the first element of
Note that if you use this class to implement a new
Registrableabstract class, you must ensure that all subclasses of the abstract class are loaded when the module is loaded, because the subclasses register themselves in their respective files. You can achieve this by having the abstract class and all subclasses in the __init__.py of the module in which they reside (as this causes any import of either the abstract class or a subclass to load all other subclasses and the abstract class).
by_name(name: str) → typing.Type[T]¶
Returns the subclass registered under the supplied
list_available() → typing.List[str]¶
Lists the names of the registered subclasses. If a default has been set, it will be the first element in the list.
Decorator that adds the decorated subclass to this class’s registry under the specified name, allowing the subclass to be retrieved using