2010-11-26 9 views
4

J'ai besoin d'utiliser un module python (disponible dans certaines bibliothèques). Le module ressemble à ceci:Comment importer une partie d'un module en python?

class A: 
    def f1(): 
    ... 

print "Done" 
... 

J'ai besoin que la fonctionnalité de la classe A. Cependant, quand j'importer le module, le code en bas (impression et d'autres) est exécuté. Y a-t-il un moyen d'éviter cela? Essentiellement, j'ai besoin d'importer une partie d'un module: "from module1 import A" qui ne devrait importer que A. Est-ce possible?

Répondre

8

Oui, bien sûr:

from module1 import A 

la syntaxe générale. Par exemple:

from datetime import timedelta 

Le code à doit être protégé contre le fond de courir au moment de l'importation en l'enroulant comme ceci:

if __name__ == "__main__": 
    # Put code that should only run when the module 
    # is used as a stand-alone program, here. 
    # It will not run when the module is imported. 
+1

Le problème est son module existant et le code en bas n'est pas protégé comme vous l'avez mentionné. – amit

0

En plus de @unwind's answer la manière habituelle de le faire est de protéger la code dans le module qui ne devrait être exécuté si le module est utilisé directement avec:

if __name__ == "__main__": 
    <code to only execute if module called directly> 

de cette façon, vous pouvez importer le module normalement.

+1

Si vous n'avez aucun contrôle sur le module, vous ne pouvez pas le faire comme ça, vous êtes SOL. fais toujours ça. – SingleNegationElimination

2

Si vous êtes seulement agacé par les imprimer des relevés, vous pouvez rediriger la sortie de code quelque part invisible, comme expliqué dans un commentaire de ce post: http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html

sys.stdout = open(os.devnull, 'w') 
# now doing the stuff you need 
... 

# but do not forget to come back! 
sys.stdout = sys.__stdout__ 

Documentation: http://docs.python.org/library/sys.html#sys.stdin

Mais Si vous voulez désactiver les modifications de fichiers, ou le code qui prend du temps, la seule chose qui me vient à l'esprit est une astuce: copier les objets dont vous avez besoin dans un autre fichier, puis l'importer (mais je ne le recommande pas!).

Questions connexes