2009-07-07 9 views
34

Eventuali duplicati:
How many Python classes should I put in one file?Sono consigliate più classi in un singolo file?

Provenendo da un C++ fondo mi sono abituato ad organizzare le mie classi in modo tale che, per la maggior parte, c'è un rapporto 1: 1 tra le classi e file . Facendo in modo che un singolo file contenga una singola classe, trovo il codice più navigabile. Mentre mi presento a Python sto trovando molti esempi in cui un singolo file contiene più classi. È questo il modo consigliato di fare cose in Python? Se è così, perché?

Mi manca questa convenzione nel PEP8?

+2

Duplicato: http://stackoverflow.com/questions/106896/how-many-python-classes-should-i-put-file/107836#107836 –

risposta

41

Ecco alcuni possibili motivi:

  1. Python non è esclusivamente basato su classi - il nucleo naturale della decomposizione di codice in Python è il modulo. I moduli hanno le stesse probabilità di contenere funzioni (che sono oggetti di prima classe in Python) come classi. In Java, l'unità di decomposizione è la classe. Quindi, Python ha un modulo = un file e Java ha una classe (pubblica) = un file.
  2. Python è molto più espressivo di Java, e se ti limiti ad una classe per file (che Python non ti impedisce di fare) ti ritroverai con un sacco di file molto piccoli - di cui tenere traccia con pochissimo beneficio.

Un esempio di funzionalità all'incirca equivalente: Java's log4j => un paio di dozzine di file, ~ 8000 SLOC. Registrazione Python => 3 file, ~ 2800 SLOC.

5

In python, la classe può essere utilizzata anche per attività di piccole dimensioni (solo per il raggruppamento, ecc.). mantenere una relazione 1: 1 risulterebbe nell'avere troppi file con funzionalità piccole o piccole.

14

C'è un mantra, "flat is better than nested", che generalmente scoraggia un uso eccessivo della gerarchia. Non sono sicuro che ci siano regole rigide su quando si vuole creare un nuovo modulo - per la maggior parte, le persone usano semplicemente la loro discrezione per raggruppare le funzionalità logicamente correlate (classi e funzioni che riguardano un particolare dominio problematico) .

Buon thread from the Python mailing list, e una citazione di Fredrik Lundh:

ancora più importante è che in Python, di non utilizzare le classi garantiscono ogni cosa; se hai bisogno di fabbriche, singleton, più modi per creare oggetti , helper polimorfici, ecc., devi utilizzare le funzioni semplici, non le classi o i metodi statici .

una volta che hai ottenuto il "E 'tutto classi", moduli di organizzare le cose in un modo che abbia senso per il codice che utilizza i componenti.
rendere le istruzioni di importazione un bell'aspetto.

+1

È stata apprezzata la spiegazione per l'uso eccessivo della parte di gerarchia. A volte è estremamente difficile capire il codice quando c'è un uso eccessivo della gerarchia al suo interno. Soprattutto quando non è ben documentato, anche un codice 'ciao mondo' diventa un mal di testa – MuhsinFatih

3

Non esiste una convenzione specifica per questo, qualsiasi cosa renda il codice più leggibile e gestibile.

2

il libro Expert Python Programming ha qualcosa legato discussione
Capitolo 4: Scelta Buone Nomi: "Costruire l'Albero Namespace" e "Splitting il Codice"
La mia linea sintesi greggio: raccogliere qualche classe correlate a un modulo (file di origine) e raccoglie alcuni moduli correlati in un unico pacchetto, è utile per la manutenzione del codice.

1

Un buon esempio di non avere file separati per ogni classe potrebbe essere il file models.py in un'applicazione django. Ogni app di django può avere una manciata di classi correlate a quell'app e metterle in singoli file fa solo più lavoro.

Analogamente, avere ogni vista in un altro file può essere controproducente.

Problemi correlati