2

我决定今天开始学习 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())

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

4

1 回答 1

3

正如已经提到的,@def foo():是无效的语法,应该是def foo():. 有了这一点,您发布的两个代码示例几乎完成了相同的事情。操作员接受一个在@函数上工作的函数并将其应用于下一个定义的函数。换句话说:

@property
def the_answer():
    return 42

与以下内容完全相同:

def the_answer():
    return 42
the_answer = property(the_answer)

但是这种@property写法更容易写、读和理解,这就是为什么它被认为是更好的做法。

于 2013-04-25T08:24:33.583 回答