In Python, è meglio definire un modulo con funzioni o un modulo con una classe che contiene funzioni? [chiuso]


13

Nel mio codice una delle due opzioni sopra funzionerebbe ugualmente bene, ma sono interessato a scoprire i pro e i contro di entrambi gli approcci.

Risposte:


9

Dipende onestamente dalle tue esigenze. Il più delle volte un modulo di funzioni sarà quello che stai cercando.

Le classi Python (imho) non dovrebbero essere pensate come classi in C # o C ++ o Java, ci deve essere un motivo logico per raggruppare un set di funzioni in un genitore più grande, le strutture di dati ne sarebbero un buon esempio, un insieme congruo di funzioni che si applicano direttamente alla classe invece di un insieme di funzioni vagamente raccolte che sono di uso generale.

  • Modulo di funzioni: scopo generale, utilità e più funzioni "globali"
  • Modulo di classe di funzioni: classi raggruppate di esigenze simili, diversi tipi di dati di elenchi collegati o funzioni di elaborazione audio o diversi tipi di alberi.

Un modulo è per il raggruppamento gerarchico complessivo di sistemi simili, di solito ho tutte le funzioni di utilità sotto un singolo modulo, tutti i dati sotto un altro, il mio livello dati e connettori sotto un modulo di tipo più "genitore". Poiché un modulo è solo un raggruppamento mentale, si tratta meno di quali tipi di sistemi sono presenti (classi o funzioni, onestamente probabilmente un mix dei due) e di più delle connessioni logiche tra i sistemi sotto il modulo.


6
Non capisco il contrasto tra una classe Python e altre lingue. In quale lingua avresti una lezione con funzioni che non hanno una ragione logica di essere raggruppate?
Guy Sirton,

7

La domanda di base è se devi avere istanze diverse del tuo modulo / classe. un modulo Python è come un singleton - ti riferisci sempre allo stesso oggetto, cioè se hai bisogno di istanze, hai bisogno di una classe.

Tuttavia, se non hai bisogno di istanze, potresti avere ancora la necessità di impostare il tuo "oggetto" su uno stato iniziale. mentre ciò è chiaramente possibile con un modulo semplice, se l'inizializzazione è più complessa della semplice impostazione di alcuni valori, consiglierei di avere il codice di inizializzazione nel __init__metodo di una classe per la leggibilità.


2
potrebbe valere la pena sottolineare che probabilmente stai parlando di qualcosa che ha uno stato, ad esempio un modulo con variabili globali contro una classe con variabili membro. se la tua classe ha solo metodi ma nessuno stato, ci sono poche ragioni per avere più istanze
bus

3
@thbusch, sì, questo è implicito in casi di necessità .
kr1,

Quando hai parlato della necessità di un'istanza che mi ha fatto capire modulo vs classe. Come se avessi bisogno di costruire più auto, allora una classe sarebbe appropriata rispetto a un modulo di calcolatrice in cui non ho bisogno di creare un gruppo di calcolatrici, ho solo bisogno di usare i metodi di aggiunta e sottrazione da quel modulo.
tazboy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.