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 :

Le fonctionnement de "property()"


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut Le fonctionnement de "property()"
    Bonjour à tous,

    Je débute dans le langage Python.
    J'ai lu dans un des cours sur Python, qu'il n'y a pas d'attributs privé ou public, tout est public mais on peut quand même contrôler par exemple la modification d'un attribut à l'aide d'une propriété qui redirigera vers une méthode que l'on peut construire.
    J'ai écrit cet exemple sur le modèle donné :

    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
    24
    25
    #/usr/bin/python
    #-*-coding:Utf-8-*
     
    class Danse8temps:
            """Classe d'essai définissant :
            - la musique
            - le temps qui devrait rester à 8 même si on essaie de le modifier à l'extérieur de la classe"""
     
            def __init__(self,musique):
                    self.musique=musique
                    self._temps=8
            def _get_temps(self):
                    print "Accesseur"
                    print "Musique à {} temps.".format(self._temps)
                    return self._temps
            def _set_temps(self,nouveau_temps):
                    print "Mutateur"
                    print "Impossible de changer {} à {} temps.".format(self.musique,nouveau_temps)
            temps=property(_get_temps,_set_temps)
    lindy=Danse8temps("swing")
    print lindy.musique
    r=lindy.temps
    print r
    lindy.temps=6
    print lindy.temps
    Quand je lance ce script, voici ce que j'obtiens :

    swing
    Accesseur
    Musique à 8 temps.
    8
    6
    Autrement dit, il y a bien une redirection pour obtenir l'attribut mais quand on le modifie...ben ça ne passe pas par la méthode en question ! Et ça modifie l'attribut...
    Quelqu'un peut-il me dire où est mon erreur ? Dans le code ? Dans la compréhension de property ?
    Merci beaucoup.

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Par défaut suite du message sur property...
    ...je suis débutant aussi sur le forum et je viens de me rendre compte que l'indentation a disparue dans mon message, ce qui rend la lecture difficile.
    Désolé.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ce sont deux choses différentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    print "temps: %s, _temps: %s" %(lindy.temps, lindy._temps)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temps: 6, _temps: 8

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur calcul et simulation
    Inscrit en
    Juin 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Ingénieur calcul et simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 41
    Par défaut
    Pour conserver les indentations, utilise la balise "Code" (le bouton #)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut
    Elle est sympa cette fonction property... mais elle ne s'applique que sur les classe "new-style"

    cf la doc :

    Return a property attribute for new-style classes (classes that derive from object).
    Votre classe doit étendre la classe object pour que ça marche pour vous l'attendez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Danse8temps(object):

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