Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3234 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  accéder au __doc__ d'un property

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

accéder au __doc__ d'un property

n°1457739
suizokukan
Posté le 15-10-2006 à 23:50:22  profilanswer
 

Bonsoir , voici une classe C avec une property p. Je cherche à récupérer l'info. contenue dans  p.__doc__ :
 

Code :
  1. class C(object):
  2.     __p = 0
  3.     def get_p(self):
  4.         return self.__p
  5.     def set_p(self, i):
  6.         self.__p = i
  7.     p = property( get_p, set_p, None, u"TEXTE SUR p" )
  8.     def __repr__(self):
  9.        return self.p.__doc__ # <<<<<<<< et voilà où cela se corse.
  10. print repr(C())


 
J'aimerais bien sûr récupérer comme message : 'TEXTE sur p.'
A la place, j'obtiens le même message que si je demandais un int.__doc__, car ma property p est en effet de type int (suite au __p = 0). Alors comment récupérer malgré tout le p.__doc__ ?
 
Merci de m'aider !  :sweat:


---------------
rule #1 : trust the python
mood
Publicité
Posté le 15-10-2006 à 23:50:22  profilanswer
 

n°1457793
masklinn
í dag viðrar vel til loftárása
Posté le 16-10-2006 à 08:22:06  profilanswer
 

Problèmes avec ton code, déjà:
 
1. __p est une variable de ta classe là, pas de l'instance, c'est sûr que c'est ce que tu veux? Je ne suis pas vraiment persuadé
2. "__" n'a pas à être utilisé pour créer une variable "semi-privée", ce n'est pas son but, et ce n'est pas pour cette raison qu'il a été inclus au langage, utiliser un seul underscore en préfixe si tu veux signifier qu'une variable est privée e.g. "_p"
3. Ta property ne sert strictement à rien. Si une property ne sert à rien, on en met pas. On est en Python là, pas en Java. Je peux comprendre que ce ne soit qu'un exemple, mais ça reste moyen.
4. La 'magie' des properties fait qu'elles ne sont plus accessibles sur les instances, il faut passer par la classe pour accéder aux métadonnées d'une property:

Code :
  1. class C(object):
  2.     def __init__(self):
  3.         self._p = 0
  4.     def _get_p(self):
  5.         return self._p
  6.     def _set_p(self, p):
  7.         if p >= 0:
  8.             self._p = p
  9.         else:
  10.             raise ValueError('p must be positive')
  11.     p = property(_get_p, _set_p, doc="p should never be negative" )
  12.     def info_p(self):
  13.         return self.__class__.p.__doc__


Code :
  1. >>> C.p
  2. <property object at 0x00F8E738>
  3. >>> c = C()
  4. >>> c.p
  5. 0
  6. >>> c.p = 5
  7. >>> c.p
  8. 5
  9. >>> c.info_p()
  10. 'p should never be negative'


Message édité par masklinn le 16-10-2006 à 08:24:07

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1458229
suizokukan
Posté le 16-10-2006 à 17:48:51  profilanswer
 

>  bonsoir Masklinn, merci pour le coup de main.
 
1. En effet, j'ai merdé : je voulais bien sûr une instance de classe.
2. Je ne savais pas la différence entre __ et _
3. Non, non, mon exemple était pourri dès le départ.
4. Merci pour le tuyeau.
 
Et merci encore : je gagne du temps et surtout je comprends mieux mes erreurs.  :jap:


---------------
rule #1 : trust the python
n°1458257
masklinn
í dag viðrar vel til loftárása
Posté le 16-10-2006 à 18:23:59  profilanswer
 

suizokukan a écrit :

2. Je ne savais pas la différence entre __ et _


En fait, "_" ne fait rien, mais comme la notion de "membre privé" n'existe pas en Python ce n'est pas grave. le préfixe "_" signifie "ceci fait partie du fonctionnement interne de ma classe, pas de son API publique, si vous l'utilisez c'est à vos risques et périls, vous risquez de tout pêter ou de voir votre code exploser quand je mettrais à jour mes classes".
 
"__" par contre fait ce qu'on appelle du "name mangling" (un léger mélange entre le nom de classe et le nom de variable). Ca reste trivial d'accéder à la variable, dans les faits le rôle du name mangling est d'éviter les collisions lorsqu'on utilise beaucoup l'héritage. Pas de créer des illusions de variables privées.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  accéder au __doc__ d'un property

 

Sujets relatifs
Developement Smartphone 2003 - Acceder aux profilsPbm avec property let/get et tableau
Java, accéder aux API windows[Javascript] Accéder à un champ à partir d'une autre page
Acceder a une bibliotheque de fonctions dans un fichier xla ??[PROB] Accéder base oracle via PL/SQL developper
[résolu]Comment passer plusieurs arg. à Property LetAcceder aux objets d'un rapport
[VB.NET] Acceder au variables d'une classe...?Acceder en VBS via ligne de cmd à un fichier excel
Plus de sujets relatifs à : accéder au __doc__ d'un property


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)