Wie soll ich Python-Quellcode organisieren? [geschlossen]

99

Ich fange mit Python an (es ist höchste Zeit, es auszuprobieren) und suche nach Best Practices.

Mein erstes Projekt ist eine Warteschlange, in der Befehlszeilenexperimente in mehreren Threads ausgeführt werden. Ich fange an, eine sehr lange main.pyDatei zu bekommen , und ich möchte sie auflösen. Im Allgemeinen suche ich nach: Wie organisieren Python-Programmierer mehrere Quelldateien? Gibt es eine bestimmte Struktur, die für Sie funktioniert?

Meine spezifischen Fragen umfassen:

  1. Sollte sich jede Klasse in einer separaten Datei befinden?
  2. Wie soll ich Unit-Tests in Bezug auf den Quellcode organisieren?
  3. Wo soll ich Dokumentkommentare ablegen, insbesondere für den Befehlszeilenbetrieb?
  4. Wie importiere ich Klassen zwischen diesen, wenn ich mehrere Verzeichnisse verwende?

Ich kann hier wahrscheinlich durch Versuch und Irrtum einige meiner eigenen Schlussfolgerungen ziehen, aber ich würde lieber von etwas Gutem ausgehen .

Andres Jaan Tack
quelle
4
Dies erklärt ein paar Dinge über die Organisation Ihres Codes docs.python.org/tutorial/modules.html
Nikola Smiljanić
2
Hier finden Sie weitere nützliche Informationen aus Python-Dokumenten. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon
10
Diese Frage ist auf der Suche nach einer allgemein akzeptierten Konvention speziell in der Python-Community. Die Antwort ist keine Ansichtssache, obwohl sie sich wie die meisten Antworten mit der Zeit ändern könnte. Ich schlage vor, dies erneut zu öffnen oder zumindest die ursprüngliche Antwort nicht zu löschen.
Andres Jaan Tack

Antworten:

32

Der Artikel, auf den Eric hingewiesen hat , ist fantastisch, da er Details zum Organisieren großer Python-Codebasen enthält.

Wenn Sie von Google hier gelandet sind und herausfinden möchten, wie Sie eine große Quelldatei in mehrere, besser verwaltbare Dateien aufteilen können, fasse ich den Vorgang kurz zusammen.

Angenommen, Sie haben derzeit alles in einer Datei mit dem Namen main.py:

  • Erstellen Sie eine weitere Quelldatei im selben Ordner (nennen wir unsere utils.pyfür dieses Beispiel).
  • Bewegen Sie was Klassen, Funktionen, Anweisungen, etc. Sie müssen aus main.pyinutils.py
  • In main.pyhinzufügen an der Spitze eine einzige Zeile:import utils

Konzeptionell wird dabei ein neues Modul erstellt, das utilsin einer anderen Quelldatei aufgerufen wird . Sie können es dann überall dort importieren, wo es benötigt wird.

Drew Noakes
quelle
Erinnerst du dich an den Artikel, auf den Eric hingewiesen hat? Ich kann anscheinend keinen Eric zu dieser Frage / Antwort finden
Daniel Rucci
7
@ DanR, ja, das ist der Artikel . Aus irgendeinem Grund hat ein Moderator seine Antwort gelöscht, obwohl er 56 positive Stimmen hatte.
Drew Noakes
1
@DrewNoakes: Ich denke, es wurde gelöscht, weil es nur ein Link ist. wenn er nur die Hauptpunkte des Artikels zusammengefasst hätte.
smci
1
Leider ist der Artikel jetzt ein toter Link :-(. Die neueste archivierte Version ist hier: web.archive.org/web/20190714164001/http://…
Igor Brejc
7

Die Art und Weise, wie Sie Ihren Code und Ihre Tests organisieren sollten, ist genau die gleiche wie für jede OO-Sprache.

Antworten von der Art, wie ich es mache. Es mag nicht richtig sein, funktioniert aber für mich

  1. Hängt davon ab, wie Ihre Funktionalität aufgeteilt ist. Für meine Haupt-Python-App habe ich 1 Datei mit Klassen für die Einstiegspunkte und dann Pakete mit verschiedenen Funktionen
  2. Ich benutze PyDev für Eclipse und organisiere es wie für Java.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Verwenden Sie DocString überall, um alles im Auge zu behalten
  2. Nachdem Sie sichergestellt haben, dass sich die relevanten __init__.pyDateien in den Ordnern befinden. Es ist nur ein einfacher Fall vonfrom module import class
AutomatedTester
quelle
5
Eine Einschränkung: Java hat eine Art diktatorische Beziehung zu Paketen, Dateien und Klassen. Manchmal habe ich viel mehr Quelldateien, als ich wirklich möchte. Die Konventionen einiger Organisationen - z. B. - vermeiden Sie (verschachtelte) innere Klassen oder "Hilfs" -Klassen, die sich in der Datei befinden - verschlimmern dies über die Anforderungen des Compilers hinaus. Halten Sie es ordentlich, und eine Hierarchie ist nützlich, aber versuchen Sie, Arbeit zu vermeiden.
Roboprog