@def vs @property,@ foo.setter

时间:2013-04-25 08:04:42

标签: python properties

我决定今天开始学习python,进入传统的“尝试随机的东西,直到某些东西有效”的方式。

我开始阅读关于类,然后是属性的内容,我尝试自己创建一些。大多数示例,甚至本网站上的问题示例都定义了这样的属性:

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

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

    @x.setter
    # etc. taken from the python tutorial

当我在文本编辑器中点击“@pro”并点击标签时,它就完成了:

# ... Class stuff ...
@def foo():
    doc = "The foo property."
    def fget(self):
        return self._foo
    def fset(self, value):
    self._foo = value
foo = property(**foo())

这些是否做同样的事情,如果他们这样做,我应该使用哪一个(即哪个被认为是更好的做法)?

1 个答案:

答案 0 :(得分:2)

如上所述,@def foo():语法无效,应为def foo():。有了这一点,您发布的两个代码示例几乎完全相同。 @运算符接受函数 - 函数,并将其应用于下一个定义的函数。换句话说:

@property
def the_answer():
    return 42

与:

完全相同
def the_answer():
    return 42
the_answer = property(the_answer)

但是@property写这种方式更容易编写,阅读和理解,这就是为什么它被认为是更好的实践。

相关问题