Дан список классов, унаследованных от этой базы:
class Plugin(object):
run_after_plugins = ()
run_before_plugins = ()
... и следующие правила:
- Плагины могут предоставить список плагинов, после которых они должны запускаться.
- Плагины могут предоставить список плагинов, которые они должны запустить раньше.
- Список плагинов может содержать или не содержать все плагины, которые были указаны в ограничениях на порядок.
Может кто-нибудь предоставить хороший чистый алгоритм для заказа списка плагинов? Также необходимо будет определить круговые зависимости ....
def order_plugins(plugins):
pass
Я придумал несколько версий, но ничего особенного: я уверен, что некоторые из вас Искусство компьютерного программирования типов получат удовольствие:)
[примечание: вопрос задан в Python, но это явно не только вопрос Python: подойдет псевдокод на любом языке]