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 :

Accès à une variable depuis une méthode d'un module importé


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Accès à une variable depuis une méthode d'un module importé
    Bonjour,

    Malgré de longues recherches, je n'ai pas réussi à trouver de solution au problème suivant:

    Mon programme principal Main.py appelle par import un Module.py.

    Dans ce Module.py je veux utiliser une variable var définie dans Main.py (avant l'appel de la fonction).

    Si j'utilise var au sein d'une simple fonction de Module.py ça marche: Python la reconnait.
    Si j'utilise var au sein d'une méthode définie dans un objet dans Module.py, ça ne marche plus: python compile mais ne reconnais pas la variable à l'execution.
    Pourtant var est bien créée avant la création de l'objet et l'appel de la méthode.

    NB: le problème est résolu si je fait execfile(Module.py) au lieu de from Module.py import * . Mais tous les forums indiquent qu'il vaut mieux utiliser import.

    Une idée ?
    Merci!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Pourquoi la variable n'est-elle pas simplement passée en paramètre quand nécessaire ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Effectivement c'est une solution.
    Mais je n'ai pas besoin de modifier cette variable. Et comme le cas se reproduit sur beaucoup de variables et beaucoup de méthodes, cela alourdirait considérablement le code.

    Pensez vous que c'est possible ?

    Surtout, je ne comprends pourquoi ça marche dans une fonction et pas dans une méthode.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par BasicPython Voir le message
    Surtout, je ne comprends pourquoi ça marche dans une fonction et pas dans une méthode.
    Ca devrait marcher pareil (i.e. planter) car avec Python la portée 'une variable se limite au module dans lequel elle est définie.

    Si on fabrique module.py avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def f():
         print (var)
     
    class A:
         def foo(self):
              print (var)
     
    f()
    A().foo()
    Déjà vous voyez que "var" étant une variable globale, il n'y a aucune raison qu'elle soit moins globale pour une fonction que pour une méthode.

    Puis le main.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var = 'toto'
    import module
    Lors de l'import, Python va exécuter f() et planter parce qu'il ne trouve pas de variable "var" dans le module "module"... Il faudra mettre en commentaire cette instruction pour s'assurer que la suivante (accès via méthode) plante aussi.
    Et si çà doit planter pareil et que chez vous çà plante dans un cas et pas dans l'autre, c'est que votre code n'est pas ce que vous dites: si çà marche c'est pour une autre raison.

    Par contre vous pouvez créez un module "globs" qui contient "var":
    puis on met à jour dans module.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import globs
    def f():
         print (globs.var)
     
    class A:
         def foo(self):
              print (globs.var)
     
    f()
    A().foo()
    Enfin main.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import globs
    import module
    print(globs.var)
    Dans ce cas, "var" n'est que variable globale de "globs" mais est accédé en tant qu'attribut d'un objet (ici un module) par les autres...

    note: comme vous utilisez "execfile", je me permets de vous signaler que Python2 sera obsolète dans quelques mois... Autant vous mettre à Python3 surtout pour apprendre et/ou développer de nouveaux projets.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Particulier
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre réponse rapide et complète !
    Je vais tester tout cela.

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Modifier une variable d'une classe depuis une autre classe
    Par Kezado dans le forum Général Java
    Réponses: 8
    Dernier message: 23/09/2010, 14h52
  3. [C#] Problème d'accès à une variable depuis une popup
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/01/2007, 15h30
  4. Depuis une requête passer une variable
    Par kitty2006 dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2006, 10h54
  5. Réponses: 5
    Dernier message: 08/09/2005, 20h33

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