46 Stimmen

Die Organisation meines Python-Projekts

Ich beginne ein Python-Projekt und erwarte, dass ich 20 oder mehr Klassen darin haben werde. Wie es sich gehört, möchte ich sie jeweils in einer separaten Datei ablegen. Allerdings wird das Projektverzeichnis schnell mit Dateien überschwemmt (oder wird, wenn ich dies tue).

Wenn ich eine zu importierende Datei in einen Ordner lege, kann ich sie nicht mehr importieren. Wie importiere ich eine Datei aus einem anderen Ordner und muss ich auf die darin enthaltene Klasse anders verweisen, wenn sie sich in einem Ordner befindet?

Vielen Dank im Voraus

31voto

Kenan Banks Punkte 196831

Erstellen einer __init__.py Datei in Ihrem Projektordner, und sie wird von Python wie ein Modul behandelt.

Die Klassen in Ihrem Paketverzeichnis können dann mit einer Syntax wie der folgenden importiert werden:

from package import class
import package.class

Unter __init__.py können Sie eine __all__ Array, das Folgendes definiert from package import * Verhalten:

# name1 and name2 will be available in calling module's namespace 
# when using "from package import *" syntax
__all__ = ['name1', 'name2'] 

Und hier ist viel mehr Informationen, als Sie überhaupt über Pakete in Python wissen wollen

Im Allgemeinen ist ein guter Weg, um zu lernen, wie man eine Menge Code organisiert, ein beliebtes Python-Paket zu nehmen und zu sehen, wie sie es getan haben. Ich würde mir Django y Verdreht für den Anfang.

22voto

S.Lott Punkte 371691

"Wie es sich gehört, möchte ich sie jeweils in einer separaten Akte ablegen. "

Das ist eigentlich keine sehr gute Praxis. Sie sollten Module entwerfen, die eng verwandte Klassen enthalten.

In der Praxis ist es so, dass keine Klasse wirklich allein steht. Im Allgemeinen gibt es Klassen in Clustern oder Gruppen, die logisch miteinander verbunden sind.

12voto

Benjamin Peterson Punkte 16442

Python zwingt Sie nicht in den unangenehmen Java-Stil mit nur einer Klasse pro Datei. Tatsächlich gilt es nicht einmal als guter Stil, jede Klasse in eine eigene Datei zu packen, es sei denn, sie sind riesig. (Wenn sie riesig sind, müssen Sie wahrscheinlich sowieso ein Refactoring durchführen.) Stattdessen sollten Sie ähnliche Klassen und Funktionen in Modulen zusammenfassen. Wenn Sie zum Beispiel einen GUI-Rechner schreiben, könnte Ihr Paket-Layout wie folgt aussehen:

/amazingcalc
   /__init__.py # This makes it a Python package and importable.
   /evaluate.py # Contains the code to actually do calculations.
   /main.py # Starts the application
   /ui.py # Contains the code to make a pretty interface

6voto

fuentesjr Punkte 48182

Die einfache Antwort ist die Erstellung einer leeren Datei mit dem Namen __init__.py in dem neuen Ordner, den Sie erstellt haben. Dann in Ihrem Top-Level-.py-Datei mit etwas wie einschließen:

import mynewsubfolder.mynewclass

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X