J'essaye d'organiser certains modules pour mon propre usage. J'ai quelque chose comme ça:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
Dans lib/__init__.py
, je souhaite définir certaines classes à utiliser si j'importe lib. Cependant, je n'arrive pas à le comprendre sans séparer les classes en fichiers et les importer dans __init__.py
.
Plutôt que de dire:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
Je veux quelque chose comme ça:
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
Est-ce possible ou dois-je séparer la classe dans un autre fichier?
ÉDITER
OK, si j'importe la lib depuis un autre script, je peux accéder à la classe Helper. Comment puis-je accéder à la classe Helper à partir de settings.py?
L'exemple décrit ici décrit les références intra-package. Je cite "les sous-modules doivent souvent se référer les uns aux autres". Dans mon cas, lib.settings.py a besoin du Helper et lib.foo.someobject doit avoir accès à Helper, alors où dois-je définir la classe Helper?
Réponses:
Le
lib/
répertoire parent de 'doit être danssys.path
.Votre "
lib/__init__.py
" pourrait ressembler à ceci:Ensuite, l'exemple suivant devrait fonctionner:
Réponse à la version modifiée de la question:
__init__.py
définit l'apparence de votre colis de l'extérieur. Si vous devez utiliserHelper
dans,settings.py
définissez-leHelper
dans un fichier différent, par exemple, «lib/helper.py
».La commande:
Production:
la source
Si
lib/__init__.py
définit la classe Helper, dans settings.py, vous pouvez utiliser:Cela fonctionne parce que. est le répertoire courant, et agit comme synonyme du paquet lib du point de vue du module de paramètres. Notez qu'il n'est pas nécessaire d'exporter Helper via
__all__
.(Confirmé avec python 2.7.10, fonctionnant sous Windows.)
la source
Vous venez de les mettre dans __init__.py.
Donc, avec test / classes.py étant:
... et test / __ init__.py étant:
Vous pouvez importer le test et avoir accès à A, B et Helper
la source
Ajoutez quelque chose comme ça à
lib/__init__.py
from .helperclass import Helper
maintenant vous pouvez l'importer directement:
from lib import Helper
la source
Edit, puisque j'ai mal compris la question:
Mettez simplement la
Helper
classe dedans__init__.py
. C'est parfaitement pythonique. Cela semble étrange venant de langages comme Java.la source
Oui c'est possible. Vous pouvez également vouloir définir
__all__
dans des__init__.py
fichiers. C'est une liste de modules qui seront importés lorsque vous le faitesla source
Peut-être que cela pourrait fonctionner:
la source