Organiser mon projet Python

je lance un projet Python et je m'attends à avoir 20 classes ou plus. Comme c'est une bonne pratique, je veux les mettre dans un fichier séparé. Cependant, le répertoire de projet est rapidement submergé de fichiers (ou le sera quand je le ferai).

Si je mets un fichier à importer dans un dossier je ne peux plus importer. Comment puis-je importer un fichier à partir d'un autre dossier et j'ai besoin de faire référence à la classe qu'il contient différemment maintenant qu'il est dans un dossier?

Merci à avance

45
demandé sur Teifion 2008-12-24 20:23:14

4 réponses

Créer un __init__.py fichier dans le dossier de vos projets, et il sera traité comme un module par Python.

les Classes de votre répertoire de paquets peuvent alors être importées en utilisant la syntaxe suivante:

from package import class
import package.class

à l'intérieur de __init__.py, vous pouvez créer un __all__ tableau qui définit from package import * comportement:

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

Et beaucoup plus d'informations que ce que vous voulez savoir sur les paquets en Python

d'une manière générale, une bonne façon de savoir comment organiser beaucoup de code est de choisir un populaire paquet Python et de voir comment ils ont fait. J'avais découvrez Django et tordu, pour commencer.

32
répondu Triptych 2008-12-24 18:09:48

"comme c'est une bonne pratique, je veux les mettre dans un fichier séparé. "

Ce n'est pas réellement une très bonne pratique. Vous devez concevoir des modules qui contiennent des classes.

en pratique, Aucune classe n'est complètement isolée. Généralement, les classes viennent dans des groupes qui sont logiquement liés.

22
répondu S.Lott 2008-12-24 17:42:54

Python ne vous force pas dans le style méchant one-class-per-file de Java. En fait, ce n'est même pas considéré comme un bon style de mettre chaque classe dans un fichier séparé à moins qu'ils ne soient énormes. (S'ils sont énormes, vous devez probablement faire le remaniement de toute façon.) Vous devriez plutôt regrouper des classes et des fonctions similaires dans des modules. Par exemple, si vous écrivez une calculatrice GUI, votre mise en page du paquet pourrait ressembler à ceci:

/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
12
répondu Benjamin Peterson 2008-12-24 17:33:00

réponse simple est de créer un fichier vide appelé __init__.py dans le nouveau dossier que vous avez fait. Ensuite, dans votre top niveau .py fichiers avec quelque chose comme:

import mynewsubfolder.mynewclass
6
répondu fuentesjr 2008-12-24 17:37:10