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 :

Problème de définition d'une Propriété


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 88
    Points
    88
    Par défaut Problème de définition d'une Propriété
    Bonjour à tous,

    Je m'initie à l'utilisation de classes en python, et j'en suis aux Propriétés.

    Voici ma 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
    22
    class Personne:
        objets_crees = 0
     
        def __init__(self, nom, prenom,age):
            Personne.objets_crees+=1
     
            self.nom = nom
            self.prenom = prenom
            self.age = age
            self._lieu_residence = "Paris"
     
     
        def get_lieu_residence (self):
            print ("Accès au lieu de résidence : {}".format(self._lieu_residence))
        def set_lieu_residence (self, lieu):
            print ("Modification du lieu de résidence : {}".format(lieu))
            self._lieu_residence = lieu
     
        lieu_residence = property(get_lieu_residence, set_lieu_residence)
     
        def __repr__(self):
            return ("Classe 'Personne' : {}".format(self.__dict__))
    Voici le Main qui l'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from Personne import Personne
     
    if __name__ == "__main__":
     
        pimousse = Personne("Zerath","Benjamin",26)
        print pimousse.age
        print Personne.objets_crees
        pimousse.lieu_residence
     
        #pimousse.set_lieu_residence("Alfortville")
        pimousse.lieu_residence = "Alfortville"
     
        pimousse.lieu_residence
        print pimousse
    Et voici ce qui s'affiche en console :
    26
    1
    Accès au lieu de résidence : Paris
    Classe 'Personne' : {'lieu_residence': 'Alfortville', 'nom': 'Zerath', 'age': 26, '_lieu_residence': 'Paris', 'prenom': 'Benjamin'}
    Et j'en viens à mon problème : On peut voir que le premier appel à "pimousse.lieu_residence" à la ligne 8 du Main réagit correctement en appelant la propriété que j'ai donnée, et donc appel le get. Pourtant à mon second appel, quand je cherche à appeler le set (ligne 11), la propriété est ignorée, et l'attribut "lieu_residence" apparaît, faisaint ainsi perdre la propriété, et l'utilité du getter/setter.

    J'ai sûrement mal fait quelque chose, mais quoi ?
    Note : si j'appelle pimousse.set_lieu_residence("Alfortville"), je n'ai aucun souci.


    Merci d'avance.

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

    Vu comment vous écrivez "print", vous devez utiliser Python2.
    Dans cette vieille version, les properties ne fonctionnent que pour les new-class.
    Dans la pratique, il faut écrire explicitement que la classe est fille d'object:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class Personne(object):
        objets_crees = 0
    La vraie question est "pourquoi ne pas apprendre avec la version courante..."

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

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 88
    Points
    88
    Par défaut
    Ah oui effectivement, ça marche nickel en python 3.3.

    Python 2.7 était préinstallé et je n'ai pas cherché plus loin...

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

Discussions similaires

  1. Problème d'initialisation d'une propriété
    Par choas dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 21/10/2008, 15h53
  2. Problème pour modifier à chaud une propriété
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/03/2008, 11h59
  3. [XSD] définition d'une propriété abstraite
    Par jyerfr dans le forum Valider
    Réponses: 1
    Dernier message: 22/02/2008, 13h39
  4. Définition d'une propriété de type 'TAnchors'
    Par Grosbenji dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/02/2008, 10h14
  5. Réponses: 1
    Dernier message: 21/12/2005, 19h08

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