Dato un elenco di classi che ereditano da questa base:Un algoritmo pulito per l'ordinamento di oggetti in base a dipendenze definite?
class Plugin(object):
run_after_plugins =()
run_before_plugins =()
... e le seguenti regole:
- plugin possono fornire una lista di plugin che devono correre dopo.
- I plug-in possono fornire un elenco di plug-in che devono essere eseguiti prima.
- L'elenco di plug-in può contenere o meno tutti i plug-in che sono stati specificati nei vincoli di ordinamento.
Qualcuno può fornire un buon algoritmo pulito per ordinare un elenco di plug-in? Sarà necessario rilevare le dipendenze circolari così ....
def order_plugins(plugins):
pass
mi è venuta in mente un paio di versioni, ma nulla particuarlly pulito: sono sicuro che alcuni di voi Art of Computer Programming tipi sarà assaporare la sfida :)
[Nota: domanda dato in Python, ma è chiaro che non è solo una questione di Python: pseudocodice in qualsiasi lingua farebbe]
@Eli: ho trovato questa domanda (http://stackoverflow.com/questions/952302/how-to-sort-based-on-dependencies) che ha menzionato questo tipo di ordinamento proprio ora ma l'esempio fornito non avere due tipi distinti di dipendenze da ordinare: può anche questo trattare con questo caso? – jkp
@jkp: può essere convertito in quella rappresentazione. Ad esempio, A dice che B deve correre prima di esso, ma C dopo di esso. Quindi, con i soli vincoli "dopo", diciamo che A è dopo B e C è dopo A. –
@Eli: haha! sì, immagino che quando lo accendi è come se fosse applicato in modo pulito. Un vincolo precedente su un plug-in è solo un vincolo successivo per un altro :) – jkp