Ici, au bureau, nous avons une bibliothèque portant le nom de l'entreprise et des sous-bibliothèques, par projet plus ou moins, et dans chaque sous-bibliothèque il peut y avoir plus de modules ou de bibliothèques. nous utilisons Django, ce qui rend notre hiérarchie quelques étapes plus profondes ...Importer des modules avec des sous-modules depuis une bibliothèque
Je suis un peu perplexe sur les différences entre les instructions d'importation suivantes:
1:
import company.productline.specific.models, company.productline.base.models specific, base = company.productline.specific, company.productline.base2:
import company.productline.specific.models, company.productline.base.models from company.productline import specific, base
3:
from company.productline import specific, base import company.productline.specific.models, company.productline.base.models
les premières importations de style que le models
? Quels sont alors les noms specific
et base
disponibles dans l'espace de noms actuel?
que se passe-t-il dans l'initialisation des modules si l'on importe les premiers sous-modules et seulement après les bibliothèques contenant?
peut-être le style le plus net est le dernier, où il est clair (au moins pour moi) que j'importer les deux modules et mettre leurs noms directement dans l'espace de noms actuel et que la seconde importation ajoute le sous-module model
modules juste importés.
d'autre part, (1) me permet de seulement importer les modules internes et de se référer à eux dans un boîtier compact mais de façon claire (specific.models
et base.models
)
pas sûr que ce soit la question, mais je suis curieux de lire les commentaires.
J'ai eu un coup d'œil à la norme paquet de courrier électronique, qui contient plusieurs modules plus profonds et ne définit pas de '__all__' (utile seulement pour' 'from import import ''), plutôt qu'il fait des choses fantaisie avec l'importation paresseuse ... assez intéressant. essayé un '__init __. py' contenant un' import models', mais ce que fait django dans les coulisses quand python importe des modèles le rend impossible (django scanne 'INSTALLED_APPS' et suppose qu'ils sont déjà là, alors que python l'importe toujours – mariotomo
A, droit __all__ est seulement pour *, à droite. Pour corriger le "module vide", vous importez le sous-module dans __init__. Je m'en suis souvenu à l'envers. :) –