擅长:python、mysql、java
<p>只有直接获取或设置属性时,才使用setter/getter:</p>
<pre><code>c.x # getter
c.x = [1,2,3] # setter
</code></pre>
<p>如果修改属性中的元素,则获取该属性,然后设置相应的元素。你的例子相当于</p>
<pre><code>d = c.x # getter again
d[1] = 4
</code></pre>
<p>您还可以使用<code>__getitem__</code>和<code>__setitem__</code>直接允许设置和获取特定项。</p>
<pre><code>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
</code></pre>