Les modules Python avec submodules et fonctions
J'avais une question sur la façon dont les bibliothèques comme numpy travail. Quand je l'importation numpy
, je me donne accès à une multitude de construit dans les classes, les fonctions et les constantes telles que numpy.array
, numpy.sqrt
etc.
Mais à l'intérieur de numpy, il y a des submodules comme numpy.les tests.
Comment est-ce fait? Dans mon expérience limitée, des modules avec des submodules sont tout simplement les dossiers avec un __init__.py
fichier, tandis que les modules avec des fonctions/classes sont de véritables fichiers python. Comment créer un module "dossier" qui a aussi des fonctions/classes?
OriginalL'auteur ImpGuard | 2013-09-01
Vous devez vous connecter pour publier un commentaire.
Un dossier avec
.py
fichiers et un__init__.py
est appelé unpackage
. Un de ces fichiers contenant les classes et les fonctions est unmodule
. Dossier de nidification peut vous donner des sous-paquets.Donc par exemple si j'avais la structure suivante:
J'ai pu importer
mypackage.module_a
oumypackage.mysubpacakge.module_c
et ainsi de suite.Vous pouvez également ajouter des fonctions à
mypackage
(comme les fonctions de numpy vous l'avez mentionné) en plaçant ce code dans les__init__.py
. Bien que ce qui est généralement considéré comme laid.Si vous regardez numpy est
__init__.py
vous verrez beaucoup de code n' - beaucoup de ce qui est de la définition de ces classes de haut niveau et des fonctions. Le__init__.py
code est la première chose exécuté lors du chargement du package.J'ai répondu à ça, tout est dans le
__init__.py
. N'importe quelle fonction il y aura une première classe membre de l'emballage lorsqu'il est chargé par l'interprète.Ah, donc c'est ce que je me demandais. J'ai pensé qu'il serait considéré comme laid comme beaucoup de misc. la logique serait d'aller en elle. Je suppose que tout a été codé séparément et en quelque sorte, le tout combiné dans init.py après? Il semble tout à fait utile d'avoir quelque chose comme cela, mais je ne suis pas sûr de la façon de les reproduire sans dumping beaucoup de code dans un seul fichier.
Dans le
__init__.py
vous pouvez importer les fichiers/classes/fonctions que vous voulez. Dans lenumpy
/scipy
cas ils ont décidé de fournir le plus utilisé de fonctionnalités. Cependant, ce qui signifie que lors de l'importationnumpy
beaucoup de ses submodules doivent être importés, cette situation a pris beaucoup de temps. Personnellement, je préfère éviter l'importation de tous les trucs dans le__init__.py
. J'ai généralement unall.py
sous-module qui le fait, donc, si vous voulez tout ce que vous pouvez faireimport X.all as X
, sinon vous pouvez choisir les éléments à importer.c'est vrai, numpy est basé sur le numérique, donc je suppose que c'est un héritage chose.
OriginalL'auteur Mike Vella