我是Python新手,我刚刚发现了这些属性。当我在一个简单的变量上尝试时,它工作得很好,但是我不能让它在列表上工作。当执行下面的代码时,它将调用两次getter而不是setter。我知道在我的示例中,属性没有附加值,但它是为了简化。
class C:
def __init__(self):
self._x = [1, 2, 3]
@property
def x(self):
print("getter")
return self._x
@x.setter
def x(self, value):
print("setter")
self._x = value
c = C()
c.x[1] = 4
print(c.x[1])
有人知道我做错了什么吗?
实际上,您的
c.x[1] = 4
分为两个操作:要想摆脱这一切是不容易的。但不管怎样,它最终还是达到了你想要的,不是吗?
如果你写了如下内容,setter就会被调用:
只有直接获取或设置属性时,才使用setter/getter:
如果修改属性中的元素,则获取该属性,然后设置相应的元素。你的例子相当于
您还可以使用
__getitem__
和__setitem__
直接允许设置和获取特定项。相关问题 更多 >
编程相关推荐