Ho un set di classi che rappresentano oggetti diversi (tabelle in un database):
class ObjA:
# some class specific attributes and methods
def refresh(self):
# implementation
pass
class ObjB:
# some class specific attributes and methods
def refresh(self):
# implementation
pass
e hanno tutti un metodo refresh
. Ora ho un task manager (come Luigi) che è usato per chiamare il metodo refresh
su ogni classe e le definizioni assomigliano a:
from somewhere import ObjA, ObjB
class RefreshObjA(TaskManager):
def run(self):
ObjA.refresh()
class RefreshObjB(TaskManager):
def run(self):
ObjB.refresh()
TaskManager
qui è una classe genitore fornita dal modulo gestore. Come puoi vedere, le definizioni di classe hanno tutte un modello identico e una convenzione di denominazione, ed è ovvio che queste possono essere generate dinamicamente come generateRefreshClasses([ObjA, ObjB, ...])
.
Tuttavia, ho resistito a questa situazione e ne ho scritto esplicitamente ciascuno perché
- Tutte le informazioni su: le classi sono disponibili quando il codice è scritto, cioè non sono dipendente da nessun input esterno / generato dall'utente, probabilmente in cui la generazione dinamica è utile. Questo uso è puramente per risparmiare spazio / combinazioni di tasti / ripetizioni.
- Non si sa se un po 'di
ObjX
potrebbe richiedere modifiche / requisiti aggiuntivi e sarà necessario fare attenzione a rimuoverlo dal generatore dinamico, affinché non venga sovrascritto. - È più difficile ragionare dove (come nel file e nella riga no :) si verifica un errore di esecuzione se il codice viene generato dinamicamente.
- Queste classi potrebbero essere importate altrove nella base di codice e io perdo il controllo basato sull'ispezione statica fornito dall'IDE.
Sono questi validi motivi per continuare a definire individualmente le classi (potrebbero esserci circa 20 o più di esse) o ci sono altri benefici per la generazione dinamica che potrebbero rendere questi problemi piccoli in confronto? La generazione dinamica di classi dovrebbe essere considerata accettabile / buona pratica in tale applicazione?