2009-12-27 3 views
0

J'ai utilisé Python 2.5, je veux savoir comment peut changer le code suivant lorsque la plate-forme est python2.5 ou python2.6pourquoi mon code fonctionne mal, il est sur le point « @property »

class C(object): 
    def __init__(self): 
     self._x = None 

    @property 
    def x(self): 
     """I'm the 'x' property.""" 
     return self._x 

    @x.setter 
    def x(self, value): 
     self._x = value 

    @x.deleter 
    def x(self): 
     del self._x 

a=C() 
print a.x#error 

merci


merci, alex, je pense que la propriété doit être 3 arguments dans votre exemple

mais, je l'ai vu un code qui, avec la 'propriété' utiliser seulement 1 argumennt, pourquoi, peut-il travailler

class SortingMiddleware(object): 
    def process_request(self, request): 
     request.__class__.field = property(get_field) 
     request.__class__.direction = property(get_direction) 

Répondre

4

Python 2.5 ne supporte pas les .setter et .deleter sous-décorateurs de property; ils ont été introduits dans Python 2.6.

Pour travailler sur les deux versions, vous pouvez, à la place, le code quelque chose comme:

class C(object): 
    def __init__(self): 
     self._x = None 

    def _get_x(self): 
     """I'm the 'x' property.""" 
     return self._x 
    def _set_x(self, value): 
     self._x = value 
    def _del_x(self): 
     del self._x 
    x = property(_get_x, _set_x, _del_x) 
+0

merci, alex, je pense que la propriété doit être 3 arguments dans votre exemple mais, j'ai vu un code qui, avec 'property' utilise seulement 1 argumennt, pourquoi, peut-il fonctionner – zjm1126

+0

'property' dans 2.5 peut être appelé avec un seul argument (ou, de manière équivalente, comme décorateur) quand vous voulez que la propriété soit en lecture seule (seulement un getter: pas de setter, pas de deleter). –

+0

La fonction 'property' a 4 arguments (getter, setter et deleter et documentation). Le dernier paramètre n'est pas vraiment pertinent pour cette discussion, donc nous l'ignorerons. Les trois autres par défaut à None, ce qui signifie que la propriété ne peut pas être "gotten", "set" ou "deleted". (si un paramètre est None, cette action est considérée comme non faisable). Lorsque vous l'appelez avec un seul argument, seule la méthode "getter" (c'est-à-dire le premier paramètre) est spécifiée pour devenir un attribut "lecture seule" et les deux autres opérations (set et delete) sont interdites. –

Questions connexes