仅当您直接获取或设置属性时,才使用setter / getter:
c.x# getterc.x = [1,2,3] # setter
如果您修改属性中的元素,则会获得该属性,然后设置相应的元素。您的示例等效于
d = c.x # getter againd[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] = 3setitem>>> c.xgetter[1, 3, 3]>>> c[2]getitem3