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 :
class C(object): def __init__(self): self._p = 0 def _get_p(self): return self._p def _set_p(self, p): if p >= 0: self._p = p else: raise ValueError('p must be positive') p = property(_get_p, _set_p, doc="p should never be negative" ) def info_p(self): return self.__class__.p.__doc__
|
Code :
>>> C.p <property object at 0x00F8E738> >>> c = C() >>> c.p 0 >>> c.p = 5 >>> c.p 5 >>> c.info_p() '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?