python中属性_列表中的Python属性

我是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,python-3-x

来源: https://codeday.me/bug/20190516/1115437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值