Je développe une application Python App Engine, où je veux diviser le contenu d'un fichier de code source Models.py
en fichiers séparés pour chaque modèle, mais je veux tout mettre dans un dossier appelé Models. Le problème est que lorsque je fais cela, mon application ne trouve plus les classes. Que devrais-je faire? Cette question ne concerne pas MVC but another question with the same title is.Comment organiser les fichiers de code source Python?
Répondre
Placez un fichier __init__.py
vide dans le répertoire Models.
Ensuite, dans votre application; sans doute d'un niveau, vous faites référence à des modules dans le répertoire des modèles comme celui-ci:
import Models
et faire quelque chose avec elle comme ceci:
Models.my_model.MyClassName
Vous pouvez également utiliser le mot-clé from
comme ceci:
from Models import my_model
et référence comme celui-ci:
my_model.MyClassName
Si vous avez seulement besoin d'une méthode à partir d'un module, vous pouvez aussi le faire:
from Models.my_model import my_method_name
my_method_name()
lien obligatoire à l'documentation.
Adam Bernier fournit une bonne description technique du fonctionnement des paquets. Une bonne description de la façon d'organiser et d'expédier un projet est décrite dans http://jcalderone.livejournal.com/39794.html
En réponse à votre commentaire sur la réponse d'Adam, en ce qui concerne 10 importations pour 10 classes, n'oubliez pas qu'il n'est pas nécessaire d'avoir une classe par module en Python. Les modules doivent être organisés par fonctionnalité, de sorte que vous pouvez regrouper les classes liées dans un seul fichier si cela a du sens.
Si vous voulez encore faire toutes les classes importables en une seule fois, vous pouvez les importer tous dans le fichier __init__.py
lui-même en utilisant la syntaxe from submodule import Class
, puis il suffit d'importer le module contenant - import mainmodule
et se référer à mainmodule.Class1
etc, ou même utiliser from mainmodule import Class1, Class2, Class3
pour importer les classes directement dans votre espace de noms et s'y référer directement.
J'ai voté pour, avec l'idée que les noms de modules et de paquets devraient être en minuscules. et que les répertoires avec des fichiers ____init____.py sont des paquets et non des modules. –
Le problème avec la division des classes en différents fichiers en Python est que je dois ajouter le préfixe du module où que je l'utilise. C'est lourd et ça n'arrive pas en C# –
@Jader: Vous pouvez éviter de faire cela en important les classes spécifiques dont vous avez besoin explicitement avec 'from module import ClassName'. – bernie