2009-09-29 7 views
16

Possible en double:
Perl's AUTOLOAD in Python (getattr on a module)Python Importation automatique

Je viens d'un milieu de PHP et essayer d'apprendre Python, et je veux être sûr de faire les choses « Python manière "au lieu de comment j'ai développé avant. Ma question vient du fait qu'en PHP5 vous pouvez configurer votre code, donc si vous essayez d'appeler une classe qui n'existe pas dans l'espace de noms, une fonction sera lancée en premier pour charger la classe et vous permettre de continuez comme si elle était déjà chargée. les avantages à ceci est que les classes n'étaient pas chargées à moins qu'elles aient été appelées, et vous n'aviez pas à vous soucier du chargement des classes avant de les utiliser.

En python, il y a beaucoup d'emphase sur l'instruction d'importation, est-ce une mauvaise pratique de tenter un truc d'importation automatique avec python, pour alléger le besoin d'une instruction import? J'ai trouvé this module qui offre l'importation automatique, mais je ne sais pas si c'est la meilleure façon de le faire, ou si l'importation automatique de modules est quelque chose qui est recommandé, des pensées?

+0

Ceci est une discussion répétée de http://stackoverflow.com/questions/1024455/autoload-in-python –

Répondre

12

Les importations servent au moins deux autres buts importants en plus de faire les modules ou le contenu des modules disponibles:

  1. Ils servent comme une sorte de déclaration d'intention - « ce module utilise les services de cet autre module » ou "ce module utilise des services appartenant à une certaine classe" - par exemple Si vous effectuez un examen de sécurité pour le code de gestion de socket, vous pouvez commencer par regarder uniquement les modules qui importent socket (ou d'autres modules liés au réseau)
  2. Les importations servent de proxy pour la complexité d'un module. Si vous vous trouvez avec des douzaines de lignes d'importations, il est peut-être temps de reconsidérer votre séparation des préoccupations au sein du module, ou au sein de votre application dans son ensemble. C'est également une bonne raison d'éviter les importations de type "from foo import *".
9

En Python, les utilisateurs évitent généralement les importations automatiques, simplement parce que cela n'en vaut pas la peine. Vous pouvez supprimer légèrement les coûts de démarrage, mais sinon, il n'y a pas (ou ne devrait pas y avoir) d'effet significatif. Si vous avez des modules qui sont coûteux à importer et qui font beaucoup de choses qui n'ont pas besoin d'être faites, réécrivez plutôt le module que de le retarder en l'important. Cela dit, il n'y a rien de fondamentalement faux avec les importations automatiques. En raison de la nature de proxy, il peut y avoir quelques pièges (par exemple, en regardant une chose qui n'a pas encore été importée). Plusieurs bibliothèques d'importation automatique circulent.

1

Si vous apprenez Python et que vous voulez faire les choses en Python, il vous suffit d'importer les modules. C'est très inhabituel de trouver des auto-importations en code Python.

1

Vous pouviez importer automatiquement les modules, mais le maximum que j'avais besoin d'importer était d'environ 10, et c'est après avoir ajouté des fonctionnalités au programme d'origine. Vous n'importerez pas beaucoup, et les noms sont très faciles à retenir.

Questions connexes