关于如何在python中使用属性功能的真实世界示例?

问题:

我有兴趣在Python中使用@property。我已经阅读了python文档和示例,在我看来,只是一个玩具代码:

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

我不知道从包装属性装饰器中填充的_x可以获得什么好处。为什么不只是实现:

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

我认为,在某些情况下,该属性功能可能很有用。但当?有人可以给我一些现实世界的例子吗?
谢谢。

回答:

其他示例将是验证/过滤集合属性(强制它们在边界或可接受的范围内)以及对复杂或快速变化的术语进行懒惰评估。
隐藏在属性后面的复杂计算:

class PDB_Calculator(object):
    ...
    @property
    def protein_folding_angle(self):
        # number crunching, remote server calls, etc
        # all results in an angle set in 'some_angle'
        # It could also reference a cache, remote or otherwise,
        # that holds the latest value for this angle
        return some_angle

>>> f = PDB_Calculator()
>>> angle = f.protein_folding_angle
>>> angle
44.33276

验证:

class Pedometer(object)
    ...
    @property
    def stride_length(self):
        return self._stride_length

    @stride_length.setter
    def stride_length(self, value):
        if value > 10:
            raise ValueError("This pedometer is based on the human stride - a stride length above 10m is not supported")
        else:
            self._stride_length = value

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Real world example about how to use property feature in python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

76 + = 86