可能我不完全理解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。
答案 0 :(得分:2)
该类应继承object
类(换句话说,该类应为new-style class)以使用value.setter
。否则不会调用setter方法。
class MyClass(object):
^^^^^^