gpt4 book ai didi

列表中的 Python 属性

转载 作者:太空狗 更新时间:2023-10-30 00:54:29 24 4
gpt4 key购买 nike

我是 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])

有人知道我做错了什么吗?

最佳答案

仅当您直接获取或设置属性时才使用 setter/getter:

c.x           # getter
c.x = [1,2,3] # setter

如果您修改属性中的元素,您将获得该属性,然后设置相应的元素。你的例子相当于

d = c.x       # getter again
d[1] = 4

您还可以使用 __getitem____setitem__ 直接允许设置和获取特定项目。

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

def __getitem__(self, idx):
print("getitem")
return self._x[idx]

def __setitem__(self, idx, value):
print("setitem")
self._x[idx] = value

>>> c = C()
>>> c[1] = 3
setitem
>>> c.x
getter
[1, 3, 3]
>>> c[2]
getitem
3

关于列表中的 Python 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com