Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
decorateurs_property [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


decorateurs_property

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
decorateurs_property [2011/04/06 08:01]
tyrtamos
decorateurs_property [2011/04/06 10:25]
tyrtamos
Ligne 72: Ligne 72:
 ===== Exemple d'utilisation ===== ===== Exemple d'utilisation =====
  
-Pour bien comprendre comment ça marche, on va créer une classe Test avec un attribut x qui sera manipulé par property. on va ajouter des 'print' pour signaler l'appel aux fonctions qui vont agir sur x. Et on va retirer la méthode de destruction de l'attribut:+Pour bien comprendre comment ça marche, on va créer une classe Test avec un attribut x qui sera manipulé par property.  
 + 
 +on va ajouter des 'print' pour signaler l'appel aux fonctions qui vont agir sur x.  
 + 
 +Et on va retirer la méthode de destruction de l'attribut:
  
 <code python> <code python>
Ligne 99: Ligne 103:
  
 <code python> <code python>
 +a = Test(5)
  
 +print a.x
 +appel à fget
 +5
 +
 +a.x = 9
 +appel à fset
 +
 +print a.x
 +appel à fget
 +9
 +
 +del a.x
 +# genère une exception: "AttributeError: can't delete attribute" puisque la méthode fdel n'existe pas 
 </code> </code>
  
 +On voit bien que les opérations de lecture (print a.x) et d'écriture (a.x=9) passent obligatoirement par les méthodes fget et fset, alors que de l'extérieur de la classe, on réalise ces opérations comme si x était un attribut 'normal'.
  
 +On a omit de définir ici la méthode fdel (ce qui interdit la destruction de x), mais on aurait pu aussi omettre de définir la méthode fset (ce qui interdirait tout changement de valeur de x), ou même la méthode fget (ce qui interdirait toute lecture).
 +
 +Pour le docstring de x, son accès à partir de l'extérieur est un peu plus complexe, parce qu'il appartient à la classe, et pas à l'instance de classe. On peut donc le retrouver par l'une de ces 2 instructions:
 +
 +<code python>
 +print Test.x.__doc__
 +docstring de x
 +
 +print a.__class__.x.__doc__
 +docstring de x
 +</code>
  
  
decorateurs_property.txt · Dernière modification: 2011/04/06 10:25 de tyrtamos