2009-12-27 79 views
0

我用Python 2.5的,我想知道如何可以改变下一个代码当平台的python2.5或python2.6的为什么我的代码运行错误,它是关于“@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 

感谢


感谢,亚历克斯,我认为财产必须是在你的榜样

3个参数,但是,我已经看到了代码与“财产”只用1个argumennt,为什么,能行

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

回答

4

Python 2.5不支持.setter.deleter子装饰器property;他们是在Python 2.6中引入的。

要在这两个版本的工作,你可以,相反,代码是这样的:

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

感谢,亚历克斯,我认为物业必须在你的榜样3个参数 但是,我已经看到了代码与'property'只使用1个参数,为什么它可以工作 – zjm1126 2009-12-27 04:11:18

+0

当你希望该属性是只读的时候,只需要一个参数(或者等同于装饰器)就可以调用2.5中的'property'(只有一个getter:没有安装者,没有删除者)。 – 2009-12-27 04:32:12

+0

'property'函数有4个参数(getter,setter和deleter和文档)。最后一个参数与本次讨论无关,所以我们会忽略它。另外三个默认为None,这意味着该属性不能被“获取”,“设置”或“删除”。 (如果参数是None,则认为该行为不可行)。当你用一个参数调用它时,只有“getter”方法(即第一个参数)被指定,所以它变成了'只读'属性,而另外两个操作(set和delete)是不允许的。 – 2009-12-27 17:44:39

相关问题