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 :

Newbie en Python : Découper mon programme en modules


Sujet :

Python

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Newbie en Python : Découper mon programme en modules
    [QUOTE=L'AMI Yves;10614525]Bonjour-bonsoir à tous.

    Je l'ai déjà dit, vous savez que je débute en Python.

    Merci à ceux qui m'ont répondu pour la taille de police des widgets. Quelqu'un m'a dit qu'une certaine solution pourrait avoir des répercutions plus étendues que prévu : si je le constate, je saurai pourquoi.

    Aujourd'hui, mon problème est celui-ci : sachant que mon programme va s'étoffer, j'essaie de commencer à le découper en plusieurs fichiers. Comme j'ai déjà écrit ce que j'appelle "Premier", comme le premier stade du déroulement de mon application, il y avait dans mon fichier (.py) d'origine une suite d'instructions commençant par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def Premier():
        quelques
        instructions
    J'ai coupé ce "paquet" dans mon fichier source, et je l'ai recopié dans le même répertoire dans un fichier nommé "Premier.py", et j'ai ajouté au début de mon fichier source initial la ligne

    et je pensais n'avoir rien d'autre à modifier (à part la ligne de codage utf8 au début de Premier.py), mais ça ne marche pas. J'ai des messages d'erreur sur "import". J'ai essayé divers trucs qui ont tous foiré, c'est pourquoi je viens de nouveau vous solliciter.

    Merci d'avance

    AMIcalement.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par L'AMI Yves Voir le message
    J'ai essayé divers trucs qui ont tous foiré, c'est pourquoi je viens de nouveau vous solliciter.
    On essaie pas n'importe quoi, on ouvre un tuto qui explique tout çà. Puis on essaie de comprendre quelles vont être les conséquences côté code, enfin on essaie d'appliquer pour voir si on a compris.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Merci, Wiztricks. En fait, je n'ai pas essayé n'importe quoi, et j'avais (entre autres) consulté ce tuto. Mais (en tous cas pour moi) il n'est vraiment pas très clair : au début, on a l'impression qu'on peut importer directement depuis le répertoire courant, puis ensuite on s'apreçoit qu'il faut le transformer en paquet (__init__.py, que j'avais omis) et il ne faut pas se mélanger entre nom de fichier (.py) et nom de fonction contenu dans le fichier. Bon, maintenant, ça y est.

    Mais du coup, je tombe sur un deuxième (d'une longue série ?) problème : dans mon fichier initial, il y avait la définition de widgets, avec des IntVar pour dialoguer avec l'utilisateur. Voila que maintenant, elles sont définies dans le programme qui les crée, et référencées dans celui que j'importe, et là, IDLE râle. Suffit-il de les déclarer globales ?

    Encore merci.

    AMIcalement.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    Mais (en tous cas pour moi) il n'est vraiment pas très clair : au début, on a l'impression qu'on peut importer directement depuis le répertoire courant.
    C'est çà le propre d'un bon tuto. on le lit une fois, on comprends pas trop et on zappe un tas de trucs, puis on pratique un peu et on le relit pour comprendre ce que çà raconte avec l'éclairage d'une petite expérience. Certains bouts qu'on avait zappé commencent à prendre un sens d'autres restent très gris.

    Citation Envoyé par L'AMI Yves Voir le message
    Suffit-il de les déclarer globales ?
    Et non car la portée d'une variable globale est limité au module.
    Mais replongez vous dans ce chapitre du tuto. avec cette question en tête, vous allez y trouver la réponse (car elle y est présentée plusieurs fois).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Bon, alors il va me falloir être plus modeste, et m'y replonger... Merci.

    AMIcalement.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    Bon, alors il va me falloir être plus modeste, et m'y replonger... Merci.
    2nd paragraphe du chapitre 6.1:
    Chaque module possède sa propre table de symboles, utilisée comme table de symboles globaux par toutes les fonctions définies par le module. Ainsi l’auteur d’un module peut utiliser des variables globales dans un module sans se soucier de collisions de noms avec des variables globales définies par l’utilisateur du module.
    Donc déjà vous savez que la portée d'une variable est réduite au module.
    Puis çà dit:
    Cependant, si vous savez ce que vous faites, vous pouvez modifier une variable globale d’un module avec la même notation que pour accéder aux fonctions : nommodule.nomelement.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Merci de ta grande patience. Je m'aperçois que tous mes vieux réflexes "VB6" sont à mettre à la poubelle. Mon découpage en modules n'est pas du tout dans la "culture" de Python.

    Mais du coup il me vient une question presque philosophique : est-il courant, en Python, d'importer tkinter (par exemple) dans les différents modules, voire paquets, que je vais créer, pour découper mon application ? A relire ton tuto, je le soupçonne, cra je ne vois pas par quel mécanisme je passerais des IntVar d'un module à un autre, mais je voudrais confirmation.

    Merci.

    AMIcalement.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    est-il courant, en Python, d'importer tkinter (par exemple) dans les différents modules, voire paquets, que je vais créer, pour découper mon application ?
    "import tkinter" charge le module tkinter (s'il n'a pas déjà été chargé) et définit la variable globale "tkinter" (associé au module) pour accéder aux objets de la bibliothèque. Donc c'est courant.

    A relire ton tuto, je le soupçonne, cra je ne vois pas par quel mécanisme je passerais des IntVar d'un module à un autre, mais je voudrais confirmation.
    IntVar est un objet.
    A = Intvar()
    crée une instance de cet objet et l'associe à la variable globale A.
    Si vous appelez une fonction d'un autre module avec A comme variable, il pourra accéder à ce même IntVar.
    Le truc dégueu serait module.B = A i.e. créer une variable globale dans B "alias".
    (ce qu'on fait par exemple via from tkinter import *)

    Moralité, avec Python, découper son code en modules n'est pas si trivial.
    Au début, il est préférable de tout avoir dans le même script.
    Puis d'apprendre les rudiments de la POO.
    A ce moment là les choses deviennent plus claires (mais le chemin est un peu trop long pour les impatients).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Dingue : il a détecté que j'étais un impatient !

    Encore merci

    AMIcalement.

Discussions similaires

  1. Découper mon programme en plusieurs classes
    Par 1abdou1 dans le forum JavaFX
    Réponses: 6
    Dernier message: 12/03/2015, 23h53
  2. executer mon programme python sous lunix
    Par nancy maman dans le forum Général Python
    Réponses: 17
    Dernier message: 06/10/2011, 21h43
  3. [Boost Python] Exécuter un script à l'extérieur de mon programme
    Par Mast3rMind dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 13/04/2011, 21h51
  4. Erreur dans mon programme en Python
    Par florichoute dans le forum Général Python
    Réponses: 1
    Dernier message: 28/04/2009, 15h08
  5. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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