Utilisation des propriétés en python

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 489 fois - Téléchargée 17 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
353
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1 -
hum ...

deux commantaire :

1 : 1 tu n'explique pas ce que tu fais... (ha si ! ca... Incomprehensible...) (j'ai du lire le code pour comprendre les explications...)

2 : Et les autres ?
Oui je parle quand tu peux faire ca avec seulement "-", "+", "%", "~"...

Je ne metterais pas de nottes.

Xeolin.
FloZix
Messages postés
42
Date d'inscription
dimanche 3 mars 2002
Statut
Membre
Dernière intervention
24 juin 2008
-
A vrai dire je n'ai pas trop compris ce que tu me reproche (surtout le 2.).
Je pensais avoir été clair au niveau de l'explication, mais faut croire que non. C'est peut être quelques notions de POO qu'il te manque.
Ce tutorial ne te rendra apparemment pas service, espérons qu'il servira pour d'autre...
cs_Alain Proviste
Messages postés
910
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -
la description est claire et utile, le commentaire de xeolin par contre n'a aucun sens.
beltegeuse
Messages postés
44
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
31 janvier 2009
9 -
Euh comment dire ...
c'est pas deux _ pour des attribut privés :
self.__mAttribut [attribut privee]
self._mAttribut [attribut qui est en qq sorte protected mais en python je ne suis pas sur que ce type existe]
FloZix
Messages postés
42
Date d'inscription
dimanche 3 mars 2002
Statut
Membre
Dernière intervention
24 juin 2008
-
Effectivement Beltegeuse, je m'empresse de corriger le code.
En fait protected n'existe pas en python, c'est plus une question de convention, histoire de bien voir qu'on utilise la propri?t? et non la variable membre.

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.