Metaclasses can register plugins dynamically.
class PluginMeta(type):
plugins = []
def __new__(cls, name, bases, dct):
new_class = super().__new__(cls, name, bases, dct)
cls.plugins.append(new_class)
return new_class
class PluginBase(metaclass=PluginMeta):
pass
class MyPlugin(PluginBase):
pass
print(PluginMeta.plugins) # Output: [<class '__main__.MyPlugin'>]