Il modello strategico viene utilizzato per questi tipi di problemi. In Python, probabilmente inizierei semplicemente usando i puntatori di funzione. Hai un molte opzioni su come attaccare questo in Python, ma ecco una possibile risposta:
def myFunc(a, b):
try:
modeFunc = locals()[a]
except:
modeFunc = standard
return modeFunc(b)
e quindi avresti qualcosa di simile:
def standard(b)
print "do for any mode"
print "do some more stuff for any mode"
def mode1(b)
print "special mode stuff"
print "do for any mode"
print "special mode stuff"
print "do some more stuff for any mode"
Il problema ovvio qui è che hai codice comune sparpagliato in tutto. Se questo è veramente comune e deve avvenire su tutta la linea, potresti voler andare con Modello modello come sottolineato da gnat. È fondamentalmente il modello di strategia, ma forse con più struttura.
È davvero difficile dire se attenersi all'approccio semplice (e accettare qualche ridondanza) o andare con qualcosa di più strutturato. Personalmente, sceglierei quello che richiedeva meno lavoro, che tende ad essere il più semplice e quindi refactoring se si finisce con una manutenzione.
Un'altra opzione è fare entrambe le cose. Cioè, usa i puntatori di funzione e a volte possono puntare a un oggetto modello di modello o altre volte puntano semplicemente a un metodo semplice. Questa è una buona opzione se hai una logica comune con le eccezioni. Cioè, se hai condizioni come questa:
if a != "mode6":
print "do some more stuff for any mode except mode 6"