当我使用@ func_name.setter注释并且它不更改变量时发生了什么?

时间:2014-08-01 10:36:43

标签: python python-2.7

我不认为我的头衔能够充分解释我所谈论的内容。以此代码为例:

>>> class D:
...     x = None
...     @property
...     def hello(self):
...             return self.x
...     @hello.setter
...     def hello(self, text):
...             self.x = text
... 
>>> d = D()
>>> d.hello = 'hello world'
>>> print d.hello
hello world
>>> print d.x
None

由于某种原因,d.hello和d.x不会返回相同的结果。这里发生了什么?

1 个答案:

答案 0 :(得分:3)

D是一个旧式类,因此不支持描述符:d.hello = 'hello world'不调用setter,它只是创建一个实例属性,它隐藏(无用的)描述符{{1} }。继承自D.hello

object