Нужно автоматически регистрировать все подклассы `Plugin` в реестре.
Два варианта — какой современный и почему?
senior
correct_vs_wrong
#195
Вариант 1
# Через метакласс — классический подход до 3.6
PLUGINS = {}
class PluginMeta(type):
def __init__(cls, name, bases, namespace):
super().__init__(name, bases, namespace)
if name != "Plugin":
PLUGINS[name.lower()] = cls
class Plugin(metaclass=PluginMeta):
pass
class JsonPlugin(Plugin):
pass
# PLUGINS == {"jsonplugin": JsonPlugin}
Вариант 2
# Через __init_subclass__ — Python 3.6+
PLUGINS = {}
class Plugin:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
PLUGINS[cls.__name__.lower()] = cls
class JsonPlugin(Plugin):
pass
Чтобы решить вопрос и сохранить попытку — войди.