Sto usando un modello factory per ottenere oggetti che non dovrebbero essere istanziati a parte la classe factory. Questi oggetti sono di tipo ViolationType
, che rappresentano le violazioni su un insieme di regole. Ecco il riepilogo della fabbrica e i tipi di violazione disponibili:
class ViolationFactory:
def __init__(self):
raise ValueError('%s cannot be instantiated' % self.__class__.__name__)
class ViolationType:
def __init__(self, name):
self.name = name
_violations = (
ViolationType('RULE_X'),
ViolationType('RULE_Y'),
# the rest of the types...
)
_violations_dict = {v.name: v for v in _violations}
@staticmethod
def get(violation_name):
if violation_name not in ViolationFactory._violations_dict:
raise ValueError('Invalid ViolationType')
return ViolationFactory._violations_dict[violation_name]
Un ViolationType
viene principalmente utilizzato per creare un'istanza di Violation
:
violation = Violation(ViolationFactory.get('RULE_X'), **kwargs)
Il problema con questo è che se faccio un errore di ortografia della stringa passata al metodo get()
factory non saprò che c'è un errore finché non viene eseguito quel particolare pezzo di codice. Quindi se provo a fare ViolationFactory.get('RULE_Z')
e tale tipo non esiste, dovrebbe generare un errore durante l'esecuzione del programma
Penso che il design attuale semplicemente non permetta un simile comportamento, quindi: come posso riprogettarlo in modo da ottenere un errore di caricamento piuttosto che uno di runtime?