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

  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 : 44
    Localisation : France, Saône et Loire (Bourgogne)

    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

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

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

    Yvan

  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 : 44
    Localisation : France, Saône et Loire (Bourgogne)

    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 : 61
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 582
    Points
    582
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/06/2006, 17h53
  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, 17h48
  3. Variable de classe JPanel
    Par Janitrix dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/12/2005, 18h50
  4. débutant:utilisation de variable entre classe
    Par troojan dans le forum MFC
    Réponses: 1
    Dernier message: 08/12/2005, 00h31
  5. Réponses: 6
    Dernier message: 23/09/2005, 13h54

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