Non eseguo VBA ma in Python, i moduli sono fondamentali. Come dici tu, possono essere visualizzati come spazi dei nomi ma sono anche oggetti a se stanti. Non sono tuttavia classi, quindi non puoi ereditarli (almeno non direttamente).
Trovo che sia una buona regola mantenere un modulo interessato a un'area di dominio. La regola che uso per decidere se qualcosa è una funzione a livello di modulo o un metodo di classe è di chiedermi se potrebbe essere usata in modo significativo su qualsiasi oggetto che soddisfi l''interfaccia' che prende gli argomenti. Se è così, allora lo svincolo da una gerarchia di classi e ne faccio una funzione a livello di modulo. Se la sua utilità in realtà è limitata a una particolare gerarchia di classi, allora creo un metodo.
Se è necessario, lavorare su tutte le istanze di una gerarchia di classi e renderle una funzione a livello di modulo, è sufficiente ricordare che tutte le sottoclassi devono ancora implementare l'interfaccia fornita con la semantica fornita. Questo è uno dei compromessi di allontanarsi dai metodi: non è più possibile apportare una leggera modifica e chiamare lo super
. D'altra parte, se le sottoclassi rischiano di ridefinire l'interfaccia e la sua semantica, allora forse quella particolare gerarchia di classi non è un'astrazione molto buona e dovrebbe essere ripensata.
Sì, è molto cool che in python posso bianco se a: importazione a_handler altro: import b_handler ma in VB non posso farlo :(Sai esempio di funzione di livello di modulo che non è una funzione singleton (vedi altre risposte)? – nikaan
@Nikita Non so cosa intendi per funzione di singleton.Un singleton è un modo (raramente buono) di pensare a un modulo ma penso che tu stia cercando di forzare i concetti di OO su un idioma non OO – aaronasterling