IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Import circulaire comment l'eviter


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    maçon
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 681
    Points
    681
    Par défaut Import circulaire comment l'eviter
    Bonjour,
    Je suis entrain de programmer une appli avec une interface graphique en utilsant wxpython.
    J'ai fait un module qui gère l'interface et un autre qui gère les opérations de traitement
    Toutefois pour retourner les infos de traitement vers le module qui gère l'interface graphique je suis obligé de déclarer le module interface graphique dans le module de traitement . Eh bien evidemment j'ai déclaré le module de traitement dans le module gérant l'interface graphique
    A priori ça fonctionne bien , mais ce n'est pas très propre et je ne sais pas comment je pourrais faire pour eviter ces imports ciculaires.
    En fait je n'ai pas envie d'avoir un seul et même module dans lequel je ferais tout.
    Si quelqu'un a une idée à me proposer je suis preneur .
    d'avance merci

    version de python 2.6.4
    version wxpython 2.8.10.1

  2. #2
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Je bosse aussi sur un projet avec une IHMG (ou GUI) d'un côté et un traitement de données de l'autre. Je compte mettre tout le traitement pouvant fonctionner de façon autonome dans un dossier (en fait on pourra l'utiliser enb ligne de commande). Ensuite pour l'IHMG, c'est elle qui va gérer le choix des données à analyser, pour ensuite appeler le module de traitement en récupérant les résultats analysés pour ensuite les afficher. De la sorte, il n'y a pas de problèmes d'importations circulaires car seul le module de traitement est à déclarer dans le module de l'IHMG.

    En espérant avoir été clair.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    Je ne suis pas sur d'avoir compris le sens de la circularité dans ton code mais bon, quand A importe B et et B importe A, c'est jamais très bon... Le mieux est généralement de mettre dans C ce dont A et B ont besoin.
    Sinon, peut-être que ça ne s'applique pas pour toi mais, comme dans Python le code n'est pas compilé, tu peux simplement déclarer des prototypes vides nécessaires pendant l'import, et qui seront écrasés après l'import.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est un problème courant, mais j'ai eu beaucoup de mal à trouver une solution satisfaisante.

    Voilà ce que je fais maintenant. Dans le module de traitement, je place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import sys
    progmain = sys.modules['__main__']
    Et j'utilise progmain comme nom de module pour accéder aux variables et aux fonctions du module principal à partir du module de traitement.

    Cela supprime la nécessité de l'importation du module principal.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    Bonjour,
    Pour ma part je crée un objet traitement dans la classe gui comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/usr/bin/env python
    #coding=utf-8
     
    class Traitement():
        def __init__(self):
            self.a="init dans traitement"
     
        def aff(self):
            print self.a
     
    class Gui_wx():
        def __init__(self):
            self.trait=Traitement() # Objet traitement encapsulé dans l'objet gui_wx
        def display_wx(self):
            self.trait.aff() # Appelle d'une méthode de Traitement
     
    gui_wx=Gui_wx()
    gui_wx.display_wx() # Appelle indirect
    gui_wx.trait.aff() # Appelle direct
    Ainsi je peux appeler les méthodes et objet traitement n'importe ou dans la classe gui..

  6. #6
    Membre éclairé
    Profil pro
    maçon
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 681
    Points
    681
    Par défaut
    merci de vos reponses , j'etais plus proche de la solution de alexdevl, mais celle me semble assez élégante
    Je laisse la discussion ouverte encore un peu de temps.

Discussions similaires

  1. [Framework] Qu'est ce que la wiring sous Spring, et comment l'eviter?
    Par jlassiramzy dans le forum Spring
    Réponses: 4
    Dernier message: 02/07/2010, 13h47
  2. Inclusions circulaires, Comment BIEN faire ?
    Par Marge dans le forum Langage
    Réponses: 24
    Dernier message: 15/07/2009, 21h37
  3. [XSD]Import Xsd comment faire?
    Par BelgianBrewer dans le forum Valider
    Réponses: 6
    Dernier message: 17/10/2008, 12h37
  4. ref circulaire : comment separer des classes en projets ?
    Par zax-tfh dans le forum Windows Forms
    Réponses: 17
    Dernier message: 20/07/2007, 16h36
  5. Réponses: 1
    Dernier message: 10/08/2005, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo