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 :

variable de classe en Python


Sujet :

Python

  1. #1
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut variable de classe en Python
    Bonjour,

    Je n'ai pas encore beaucoup d'expérience en Python. Je viens de Java et C++ et je cherche comment définir une variable de classe en Python (équivalent à un champ static de classe en Java ou C++) afin, par exemple, de compter le nombre d'instances d'une classe:

    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
    20
    21
    # Y a-t'il moyen d'initialiser ce type de variable
    # comme une variable statique (au sens C++/Java) de
    # la class Personne?
    nPers = 0               #???
    class Personne:
        def __init__(self, nm, pm):
            self.__nom = nm
            self.__prenom = pm
            nPers = nPers + 1
     
        def getNom(self):
            return self.__nom
     
        def getPrenom(self):
            return self.__prenom
     
        def printNombre(self):
            print "Il y a", nPers, "personnes!"
     
    Thierry = Personne("Chappuis", "Thierry")
    Thierry.printNombre()
    Le code ci-dessus ne marche pas, et je voudrais éviter de passer par une variable globale comme nPers. Je vous remercie d'avance pour vos conseils. Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    C'est possible, il faut déclarer la variable juste après la classe.
    On peut ensuite appeler la variable avec Personne.nPers ou <MonInstance>.nPers

    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
    20
    21
    22
    23
    # Y a-t'il moyen d'initialiser ce type de variable 
    # comme une variable statique (au sens C++/Java) de 
    # la class Personne? 
    class Personne:
        nPers = 0
        def __init__(self, nm, pm): 
            self.__nom = nm 
            self.__prenom = pm 
            Personne.nPers += 1
     
        def getNom(self): 
            return self.__nom 
     
        def getPrenom(self): 
            return self.__prenom 
     
        def printNombre(self): 
            print "Il y a", Personne.nPers, "personnes!" 
     
    Thierry = Personne("Chappuis", "Thierry")
    Thierry2 = Personne("", "Toto")
    Thierry.printNombre()
    print Thierry.nPers

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Merci beaucoup!

    Et dire que je n'y avais même pas pensé... Je croyais qu'une déclaration de la sorte créerait une variable d'instance qui serait propre à chaque objet.

    Testé et approuvé! Merci encore

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Petite précision : pour créer une variable de classe, il aurait fallu faire un Tout est dans le self...

    Yvan
    Une solution n'est valable que dans un contexte donné

  5. #5
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Citation Envoyé par ypicot
    Petite précision : pour créer une variable de classe, il aurait fallu faire un Tout est dans le self...

    Yvan
    Cela crée plutôt une variable d'instance de classe.

  6. #6
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    C'est ce que je voulais dire... Le self dénote l'instance.

    Désolé, ma langue a fourché (ce qui est un comble pour du python)
    Merci de m'avoir corrigé.

    Yvan
    Une solution n'est valable que dans un contexte donné

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/06/2006, 16h53
  2. Accès a des variables de classes
    Par lalouve dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/05/2006, 16h48
  3. Variable de classe JPanel
    Par Janitrix dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/12/2005, 17h50
  4. débutant:utilisation de variable entre classe
    Par troojan dans le forum MFC
    Réponses: 1
    Dernier message: 07/12/2005, 23h31
  5. Réponses: 6
    Dernier message: 23/09/2005, 12h54

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