Come devo organizzare il codice sorgente Python? [chiuso]


99

Sto iniziando con Python (è giunto il momento di provarlo) e sto cercando alcune best practice.

Il mio primo progetto è una coda che esegue esperimenti da riga di comando in più thread. Comincio ad avere un main.pyfile molto lungo e vorrei romperlo. In generale, sto cercando: in che modo i programmatori python organizzano più file sorgente? C'è una struttura particolare che funziona per te?

Le mie domande specifiche includono:

  1. Ogni classe dovrebbe essere in un file separato?
  2. Come devo organizzare gli unit test relativi al codice sorgente?
  3. Dove devo inserire i commenti del documento, in particolare quelli per il funzionamento da riga di comando?
  4. Se utilizzo più directory, come faccio a importare classi tra di loro?

Probabilmente posso trarre alcune delle mie conclusioni qui per tentativi ed errori, ma preferisco iniziare da qualcosa di buono .


4
Questo spiegherà un paio di cose sull'organizzazione del tuo codice docs.python.org/tutorial/modules.html
Nikola Smiljanić

2
Ecco alcune informazioni più utili dai documenti di Python. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
Questa domanda è alla ricerca di una convenzione ampiamente accettata specificamente nella comunità Python. La risposta non è una questione di opinione, anche se come la maggior parte delle risposte potrebbe cambiare nel tempo. Suggerisco che venga riaperto o per lo meno la risposta originale non cancellata.
Andres Jaan Tack

Risposte:


32

L' articolo a cui ha fatto riferimento Eric è fantastico perché copre i dettagli dell'organizzazione di grandi basi di codice Python.

Se sei arrivato qui da Google e stai cercando di scoprire come dividere un file sorgente di grandi dimensioni in più file più gestibili, riassumerò brevemente il processo.

Supponi di avere attualmente tutto in un file chiamato main.py:

  • Crea un altro file sorgente nella stessa cartella (chiamiamo il nostro utils.pyper questo esempio)
  • Sposta le classi, le funzioni, le istruzioni, ecc. Di cui hai bisogno main.pyinutils.py
  • In main.pyaggiungi una singola riga in alto:import utils

Concettualmente ciò che fa è creare un nuovo modulo chiamato utilsin un altro file sorgente. Puoi quindi importarlo ovunque sia necessario.


Ti capita di ricordare l'articolo a cui ha fatto riferimento Eric? Non riesco a trovare un Eric su questa domanda / risposta
Daniel Rucci

7
@ DanR, sì, questo è l'articolo . Per qualche motivo un moderatore ha cancellato la sua risposta, nonostante avesse 56 voti positivi.
Drew Noakes

1
@DrewNoakes: penso che sia stato cancellato per essere una risposta di solo collegamento; se solo avesse riassunto i punti principali dell'articolo.
smci

1
Sfortunatamente l'articolo è un link morto ora :-(. L'ultima versione archiviata è qui: web.archive.org/web/20190714164001/http://…
Igor Brejc

7

Il modo in cui dovresti organizzare il codice e i test è esattamente lo stesso che faresti per qualsiasi linguaggio OO.

Risposte dal modo in cui lo faccio. Potrebbe non essere giusto ma funziona per me

  1. Dipende da come è suddivisa la tua funzionalità. Per la mia app Python principale ho 1 file con classi per i punti di ingresso e quindi pacchetti di diversi bit di funzionalità
  2. Uso PyDev per eclipse e lo organizzo come farei per Java.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Usa DocString ovunque per tenere traccia di tutto
  2. Dopo esserti assicurato che i __init__.pyfile rilevanti siano nelle cartelle. è solo un semplice caso difrom module import class

5
Un avvertimento, però: java ha una relazione dittatoriale con pacchetti, file e classi. A volte mi ritrovo con molti più file sorgente di quelli che vorrei veramente. Le convenzioni di alcune organizzazioni - ad esempio - evitare le classi interne (annidate) o le classi "helper" inferiori nel file - peggiorano le cose, al di là dei requisiti del compilatore. Tienilo ordinato e una gerarchia è utile, ma cerca di evitare il trucco.
Roboprog
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.