我决定今天开始学习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())
这些是否做同样的事情,如果他们这样做,我应该使用哪一个(即哪个被认为是更好的做法)?
答案 0 :(得分:2)
如上所述,@def foo():
语法无效,应为def foo():
。有了这一点,您发布的两个代码示例几乎完全相同。 @
运算符接受函数 - 函数,并将其应用于下一个定义的函数。换句话说:
@property
def the_answer():
return 42
与:
完全相同def the_answer():
return 42
the_answer = property(the_answer)
但是@property
写这种方式更容易编写,阅读和理解,这就是为什么它被认为是更好的实践。