So che questa domanda ha un titolo simile a questo: C++: calling member functions within constructor? ma sto facendo una domanda più generale.Chiamare le funzioni membro da un costruttore
È buona pratica chiamare le funzioni membro all'interno di un costruttore? Rende la lettura del codice più semplice e preferisco il modo di incapsulare di farlo (cioè ogni blocco di codice ha un unico obiettivo).
Un esempio illustrativo, in pitone:
class TestClass:
def __init__(self):
self.validate()
def validate(self):
# this validates some data stored in the class
È questo un modo migliore di farlo che scrivere il codice validate
dentro il costruttore? Ci sono degli svantaggi in questo metodo? Ad esempio, è più costoso l'overhead della funzione?
Personalmente lo preferisco per la leggibilità, ma è solo una mia preferenza.
Acclamazioni
realtà, chiamando metodi virtuali da un costruttore può essere molto utile. Ad esempio, un metodo virtuale per recuperare un tipo di classe specifico da istanziare nel costruttore base in cui la classe specifica è un discendente di una classe base nota o l'implementatore di un'interfaccia conosciuta. In questo modo puoi mantenere l'istanziazione e la distruzione nella classe base, consentendo al contempo la composizione personalizzata per i discendenti. –
Ti consiglia di "chiamare un metodo su un oggetto non inizializzato" come buona pratica per l'uso generico in tutte le lingue? Preferirei utilizzare i pattern di progettazione AbstractFactory e/o Builder per risolvere il tuo problema di esempio. – richj