begin process at 2012 02 05 00:19:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > UTILISATION DES PROPRIÉTÉS EN PYTHON

UTILISATION DES PROPRIÉTÉS EN PYTHON


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Classé sous :propriété, property, objectproperty Niveau :Débutant Date de création :12/05/2008 Date de mise à jour :19/05/2008 12:49:33 Vu :3 706

Auteur : FloZix

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

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

  • #!/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))
#!/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/


 Historique

19 mai 2008 12:45:48 :
Suite au commentaire de Beltegeuse : pour rendre les variables membres réellement privée il faut 2 '_'
19 mai 2008 12:49:33 :
Suite au commentaire de Beltegeuse, 2 __ pour rendre l'attribut véritablement privé

 Sources de la même categorie

CALCULATRICE (AIDE SUR LES FONCTIONS EN PYTHON) par matad0r
CALCULATRICE, INTRODUCTION AU LAMBDA par xeolin
UNIX - MODULE TIME : TEMPS D'UNE FONCTION ALGORITHMIQUE AVEC... par loupmagic
Source avec Zip TUTORIEL - INTRODUCTION À WXPYTHON par aera group
Source avec Zip TUTORIEL - COMPILATION AVEC PY2EXE par aera group

Commentaires et avis

Commentaire de xeolin le 13/05/2008 18:50:02

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.

Commentaire de FloZix le 13/05/2008 19:22:55

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...

Commentaire de Alain Proviste le 15/05/2008 14:45:14 administrateur CS

la description est claire et utile, le commentaire de xeolin par contre n'a aucun sens.

Commentaire de beltegeuse le 19/05/2008 09:50:45

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]

Commentaire de FloZix le 19/05/2008 12:43:07

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.

Commentaire de beltegeuse le 19/05/2008 13:41:05 8/10

en tout cas j'ai appris un truc avec cette source :
property qui est vachement pratique!

Commentaire de aera group le 24/06/2008 15:07: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 !

Commentaire de FloZix le 24/06/2008 17:12:38

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...

Commentaire de Alain Proviste le 24/06/2008 18:32:11 administrateur CS

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"

Commentaire de Narann le 02/12/2009 18:53:48

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 :)

Commentaire de xeolin le 02/12/2009 20:46:33

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lancement d'une impression avec Uno [ par mystikilla ] Bonjour, je souhaite imprimer un document ocalc d'openoffice via un code python. Pour l'instant mon code est celui ci mais ca ne fontionne pas, je pen


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales