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 :

Pourquoi ma variable de classe est globale ?


Sujet :

Python

  1. #1
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pourquoi ma variable de classe est globale ?
    Bonjour,

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Module:
        parameters = {}
     
        def setModule(self, paramName, paramValue):
            self.parameters[paramName] = paramValue
     
    mod3 = Module()
    mod3.setModule('name3', 'param3')
    mod4 = Module()
    mod4.setModule('name4', 'param4')
     
    print mod3.parameters
    print mod4.parameters
    Output:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {'name4': 'param4', 'name3': 'param3'}
    {'name4': 'param4', 'name3': 'param3'}
    Pourquoi mes 2 instances ont les meme valeurs ? comment les rendre unique?

    Par exemple je veux que:
    mod3.parameters soit {'name3': 'param3'}
    mod4.parameters soit {'name4': 'param4'}
    en passant par ma methode setModule.

    Merci

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Module(object):
        def __init__(self):
            self.parameters={}
        def setModule(self, paramName, paramValue):
            self.parameters[paramName]=paramValue
     
    mod3=Module()
    mod3.setModule('name3', 'param3')
    mod4=Module()
    mod4.setModule('name4', 'param4')
     
    print mod3.parameters
    print mod4.parameters
    Résultat :

    {'name3': 'param3'}
    {'name4': 'param4'}
    C'est bien cela que vous voulez?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    salut,
    J'étais en train d'écrire ma réponse, mais grillé par fred1599

    Pour t'aider à comprendre, la réponse est dans ta question :
    Pourquoi ma variable de classe est globale ?
    Parce que c'est une variable de classe justement, elle est donc commune à toutes les instances de ta classe.
    Ce qu'il te faut est une variable d'instance, et c'est exactement ce qui est proposé dans le code de fred1599.

  4. #4
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Salut

    J'imagine que tu viens d'un langage tel Java / PHP / C++.
    Les déclarations d'attributs se font un peu différemment. Voici un équivalent :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MaClasse {
        private static String attributStatique;
        private String attributDInstance;
    }
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MaClasse:
        attributStatique = ''
     
        def __init__(self):
            self.attributDInstance = ''
    Le fait est qu'en python, tu peux rajouter des variables où tu veux quand tu veux (ou presque). C'est ce qui fait cette différence de syntaxe.

  5. #5
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    oui je viens du c++ et java...
    Je voyais bien qu'un truc de base me manquait mais je n'avais aucune idée.
    Maintenant j'ai bien compris, merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un objet dont la classe est une variable
    Par jibe38 dans le forum Langage
    Réponses: 15
    Dernier message: 14/05/2014, 11h58
  2. Réponses: 3
    Dernier message: 24/02/2013, 23h36
  3. Pourquoi cette variable est-elle vide ?
    Par yann18 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 10h36
  4. variables globales vers variables de classe
    Par Chop_chop dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2007, 17h52
  5. Réponses: 7
    Dernier message: 27/07/2005, 17h34

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