Utilisation des propriétés en python

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 578 fois - Téléchargée 19 fois

Contenu du snippet

L'utilisation des propriétés permet de protéger les attributs d'une classe en ayant toujours un regard sur leur contenu. Les propriétés apparaissent pour l'utilisateur de la classe comme de simples attributs de classe publics mais elles sont en fait des attributs privés uniquement accessibles par des accesseurs (que c'est original !).

Pour mieux comprendre nous allons utiliser une classe convertisseur (encore très original!). Cette classe dispose de deux propriétés : euros et francs. Nous souhaitons que la valeur stockée dans euros soit toujours cohérente avec celle de francs, et vis-versa. Pour ce faire nous allons utiliser les propriétés.

Comme je l'ai indiqué plus haut, les propriétés sont en fait un ensemble attributs privés/accesseurs. Il faut donc commencer par déclarer nos deux attributs privés puis les méthodes de classe qui vont gérer leurs valeurs. Ensuite la fonction property va nous permettre de créer la propriété correspondante :

Source / Exemple :


#!/usr/bin/env python
#-*- coding: utf-8 -*-
 
class convertisseur(object):
 
    def __init__(self):
        self.__taux = 6.55957
        self.__euros = 0
        self.__francs = 0
 
    # accesseurs en lecture
    def getEuros(self):
        return self.__euros
 
    def getFrancs(self):
        return self.__francs
 
    # accesseurs en écriture
    def setEuros(self, euros):
        self.__euros = euros
        self.__francs = self.__euros*self.__taux
 
    def setFrancs(self, francs):
        self.__francs = francs
        self.__euros = self.__francs/self.__taux
 
    # declaration des propriétés
    euros = property(getEuros, setEuros)
    francs = property(getFrancs, setFrancs)

if __name__ == '__main__':
    test = convertisseur()
 
    test.francs = 10
    print('%.2f francs -> %.2f euros' %(test.francs, test.euros))
 
    test.euros = 25
    print('%.2f francs -> %.2f euros' %(test.francs, test.euros))

Conclusion :


Ainsi maintenant je peux directement modifier la valeur euros et ma classe va automatiquement modifier francs pour me garantir la cohérence entre les 2 attributs de la classe.

On pourrait également créer une propriété pour le taux afin que l'utilisateur de la classe puisse le modifier. Il faudra bien évidement prendre soin de recalculer les valeurs d'euros et de francs dans l'accesseur setTaux.

http://www.flozix.com/wordpress/

A voir également

Ajouter un commentaire Commentaires
xeolin Messages postés 336 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 8 novembre 2011 2
2 déc. 2009 à 20:46
A mon avis ton code est plus une source qu'à un tutorial.
Personnellement j'aurais préférer plus d'explication, par exemple au niveau de l'utilité des différentes actions.

Petit exemple, ta "# declaration des propriétés", c'est bien, on a le nom, mais tu n'expliques pas l'utilité...

Ne prend pas la peine de m'expliquer, j'ai compris, mais je trouve cela peut-être trop inaccessible pour la catégorie débutant. Il te faut peut être penser que te public a un niveau très varié, est il dommage de restreindre celui-ci par suffisance.
Note toujours réservé.
xeolin
Narann Messages postés 2 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 2 décembre 2009
2 déc. 2009 à 18:53
Merci pour ce code! J'ai appris ce qu'était les property (avec description et tout), pas facile de trouver de la doc en FR en effet.

Merci :)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
24 juin 2008 à 18:32
ne te justifie pas flozix, ils n'ont rien compris, c'est pas ta faute, c'est un très bon exemple qui a sa place ici. Pas la peine d'essayer de leur expliquer étant donnée leur agressivité.
"soions serieux"
FloZix Messages postés 42 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 24 juin 2008
24 juin 2008 à 17:12
Je ne montre pas l'utilisation des classes mais des propriétés de classe. Je n'ai rien créé, j'explique comment utiliser (rubriquer tutorial...) un outils pratique que met à notre disposition python et que peu de personne sur ce site utilise dans leur source.
Pour ce qui est du choix de l'exemple c'est purement pédagogique (tutorial encore).
Je ne comprends pas cet acharnement sur ce tuto. J'ai eu beaucoup de mal à trouver des explications sur l'utilisation des propriétés en français et je pense que j'aurais été content de tombé sur cet page...
aera group Messages postés 382 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 8 novembre 2010 18
24 juin 2008 à 15:07
Je me refuse à noté un language de programmation que tu n'a pas créé ! Dans cette source tu ne fait rien, tu montre simplement l'utilisation des classes ! Je reprend ce que dit Xeolin : Il m'a fallu 5 min pour comprendre ne seraisse que la finalité de ta source ! Je pense que la critique n°2 de Xeolin, c'est tant que tu y est dans tes explication de Python, montre nous des exemples avec l'addition la soustraction, ... Soions sérieux !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.