Nel mio problema avevo molti oggetti con un comportamento leggermente diverso, ma attributi e metodi identici con interfacce identiche. Le varianti degli oggetti erano abbastanza numerose e non volevo creare una classe per ognuna di esse, con tanto codice di ripetizione.
Ho aggirato la creazione di molte derivate classificate dal seguente costrutto (pseudocode per abbreviazione)
#aTP = all the parameters
def _function_version_1(aTP):
...
...
def _function_version_BIG(aTP):
...
class BaseClass(object):
_typesOfImplementation = {'ONE' : _function_version_1,
...
'BIG' : _function_version_BIG,
}
def __init__(self, type, ...)
...
if type not in _typesOfImplementation:
raise Exception('Unknown type')
# respective function for this object
self.function = lambda aTP:BaseClass._typesOfImplementation[type](self, aTP)
Questa è ancora un'implementazione del modello di strategia, anche se non ho usato le classi per la rispettiva versione della funzione (che sarebbe stata di nuovo un pessimo gruppo di classi)?