Python setter不会改变变量

时间:2014-07-02 15:15:12

标签: python-2.7 properties setter

可能我不完全理解python中属性的概念,但我对Python程序的行为感到困惑。

我有一个这样的课程:

class MyClass():
  def __init__(self, value):
    self._value = value

  @property
  def value(self):
    return self._value

  @value.setter
  def value(self, value):
    self._value = value

我期望的是,调用MyClass.value = ...会改变_value的内容。但实际发生的是:

my_class = MyClass(1)
assert my_class.value == 1 # true
assert my_class._value == 1 # true

my_class.value = 2

assert my_class.value == 2 # true
assert my_class._value == 2 # false! _value is still 1

我在编写属性时是否犯了错误,或者这是否真的是正确的行为?我知道我不应该调用my_class._value来读取值,但无论如何我都希望它能够工作。我使用的是Python 2.7。

1 个答案:

答案 0 :(得分:2)

该类应继承object类(换句话说,该类应为new-style class)以使用value.setter。否则不会调用setter方法。

class MyClass(object):
              ^^^^^^