Creazione di oggetti da una classe / classi con diversi valori fissi che possono essere facilmente espandibili da un utente

1

Sto creando un programma e mi piacerebbe conoscere la procedura migliore per creare una classe che definisce diversi tipi di carburante

Ad esempio, ho la seguente classe che ho scritto in python:

class Fuel():
    def __init__(self, fuel_type, energy_density):
        self.fuel_type = fuel_type
        self.energy_density = energy_density

    def energy_output():
        return energy_density*100

I tipi di carburante possono essere gas, carbone o petrolio, con densità di energia rispettivamente di 35,7, 24,0 e 43,37.

Questi numeri non cambieranno se usati in futuro. Tuttavia, qualcuno potrebbe voler aggiungere un altro tipo di carburante attraverso un file di dati.

Ho pensato che forse l'ereditarietà potesse funzionare, definendo una sottoclasse per ogni tipo di carburante, con le densità di energia predefinite. Ma questo creerebbe un numero di classi diverse che non erano molto diverse, e sarebbe più difficile per gli utenti aggiungere un nuovo tipo di carburante.

Qualsiasi aiuto sulle migliori pratiche sarebbe molto apprezzato.

    
posta AKE 06.09.2018 - 18:00
fonte

1 risposta

2

Se tutte le istanze sono conosciute al momento della compilazione (le tue o quelle consumatrici dello sviluppatore), dovresti creare i tuoi ben noti esempi come istanze globalmente note o offrire loro metodi di produzione statici da qualche parte (in particolare se i tuoi oggetti sono mutabili). / p>

Solitamente ottieni questo risultato creando una classe come Fuels e aggiungendo N statiche di sola lettura ad esso che sono inizializzate con i tuoi esempi o aggiungendo N metodi statici ognuno dei quali crea uno degli esempi.

I tuoi consumanti sviluppatori sono liberi di definire i loro valori ben noti da qualche altra parte allo stesso modo.

Questo è il modo statico (registrazione nel codice).

Se al contrario quelle istanze (e le nuove) dipendono da dati conosciuti solo in fase di esecuzione, è possibile creare un FuelRegistry per registrare gli oggetti forniti e riceverli con il loro nome (forse il tipo di carburante). Quel registro potrebbe rimanere persistente o solo essere in memoria.

Puoi combinare questi approcci aggiungendo un codice che precompila il tuo registro con le tue istanze standard.

Questo è il modo dinamico.

    
risposta data 06.09.2018 - 19:19
fonte

Leggi altre domande sui tag