2011-01-14 3 views
9

Je travaille sur un projet dans lequel j'ai besoin d'utiliser un module tiers dans différents fichiers de projet (fichiers .py). La situation est comme ça.Python importations multiples pour un module commun

J'ai un fichier "abc.py" qui importe le module tiers "common.py". Il y a quelques autres fichiers qui importent aussi "common.py". Tous ces fichiers sont également importés dans le fichier de projet principal "main.py".

Il semble redondant d'importer plusieurs fois le même module dans votre projet dans des fichiers différents, car "main.py" importe également tous les fichiers du projet.

Je ne suis pas sûr non plus comment la taille du projet est affectée par plusieurs instructions d'importation.

Quelqu'un peut-il m'aider à rendre les choses un peu plus simples.

Répondre

21

L'importation uniquement charge un module une fois. Toutes les importations après cela l'ajoutent simplement à l'espace de noms actuel. Il suffit d'importer des choses dans les fichiers dont vous avez besoin pour qu'elles soient disponibles et de laisser Python s'occuper de charger les modules.

3

Oui, vous avez raison, ce comportement existe vraiment en Python. A savoir, si le code utilisateur tente d'importer le même module de différentes manières, par exemple - import a et import A.a (où fichier a.py se trouve dans le paquet A et la première import se fait à l'intérieur le paquet A tandis que l'autre import vient comme de l'extérieur).

Cela peut facilement se produire dans la vie réelle, en particulier pour les projets Python à plusieurs niveaux.

J'ai rencontré un effet secondaire d'un tel comportement, à savoir que la commande isinstance ne fonctionne pas lorsqu'un objet est vérifié par rapport à une classe définie dans le module qui a été importé de cette manière.

La solution que je peux penser est de redéfinir la fonction __builtin__. __ import__ pour effectuer son travail plus intelligemment.