Есть коллекция модулей, по сути это разные обработчики с одним интерфейсом.
processors/foo.py:
class FooProcessor:
...
processors/bar.py:
class BarProcessor:
...
processors/baz.py:
class BazProcessor:
...
processors/__init__.py:
from .foo import FooProcessor
from .bar import BarProcessor
from .baz import BazProcessor
И испольузется это так:
from processors import *
def spawn(name):
classname = name + "Processor"
return globals()[classname]()
spawn("Foo")
Так вот, надоело все процессоры регистрировать в __init__.py, криво это да и всякие линтеры ругаются на неиспользуемые модули.
Вопрос: как это сделать красиво?
В C++, например, я бы добавил к каждому классу статический Registrar, но тут, насколько я понимаю, пока явно не импортировать все модули из них ничего не выполнится.
Наверное можно в spawn руками импортировать модуль по имени, но имя класса не всегда совпадает с именем модуля (и в модуле может вообще быть несколько классов).
Наверное можно запихнуть все модули в modname/__init__.py, но это неудобно и криво.
Наверное можно в processors/__init__.py перебрать модули в processors и импортировать их все - есть пример как это сделать?
Может есть ещё красивее способ?