【问题标题】:why my code run wrong ,it is about '@property'为什么我的代码运行错误,它是关于“@property”的
【发布时间】:2009-12-27 03:57:06
【问题描述】:

我用的是python 2.5,想知道Platform是python2.5还是python2.6的时候怎么改下一段代码

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

谢谢


谢谢,alex,我认为在你的例子中属性必须是 3 个参数

但是,我看到一个带有“属性”的代码只使用 1 个参数,为什么,它可以工作

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

【问题讨论】:

    标签: python


    【解决方案1】:

    Python 2.5 不支持property.setter.deleter 子装饰器;它们是在 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)
    

    【讨论】:

    • 谢谢,alex,我认为在你的例子中属性必须是 3 个参数,但是,我看到一个带有“属性”的代码只使用 1 个参数,为什么,它可以工作
    • property 在 2.5 中,当您希望属性为只读时(只有一个 getter:没有 setter,没有 deleter),可以只使用一个参数(或者等效地,作为装饰器)调用.
    • property 函数有 4 个参数(getter、setter 和 deleter 以及文档)。最后一个参数与本次讨论无关,因此我们将忽略它。其他三个默认为 None,这意味着该属性不能被“获取”、“设置”或“删除”。 (如果参数为 None,则认为该操作不可行)。当您使用单个参数调用它时,仅指定“getter”方法(即第一个参数),因此它成为“只读”属性,并且不允许其他两个操作(设置和删除)。
    • 我知道这是旧的,但这个答案和 cmets 对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多