は、私は非常によく似た質問に対して、この答えを見てきました:クラスオブジェクトでは、リストの1つのエントリだけを変更したときに属性を自動更新する方法はありますか?
:私は使用してリストを更新するとき、このコードでclass SomeClass(object):
def __init__(self, n):
self.list = range(0, n)
@property
def list(self):
return self._list
@list.setter
def list(self, val):
self._list = val
self._listsquare = [x**2 for x in self._list ]
@property
def listsquare(self):
return self._listsquare
@listsquare.setter
def listsquare(self, val):
self.list = [int(pow(x, 0.5)) for x in val]
>>> c = SomeClass(5)
>>> c.listsquare
[0, 1, 4, 9, 16]
>>> c.list
[0, 1, 2, 3, 4]
>>> c.list = range(0,6)
>>> c.list
[0, 1, 2, 3, 4, 5]
>>> c.listsquare
[0, 1, 4, 9, 16, 25]
>>> c.listsquare = [x**2 for x in range(0,10)]
>>> c.list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
:
In class object, how to auto update attributes?
が、私はここにコードを貼り付けます
>>> c.list = [1, 2, 3, 4]
c.listsquareはそれに応じて更新されます:
>>> c.listsquare
[1, 4, 9, 16]
しかし、私は試してみてください。
>>> c.list[0] = 5
>>> c.list
[5, 2, 3, 4]
Listsquaresは更新されません:私は、リスト内の項目を1つだけ変更したときに
>>> c.listsquare
[1, 4, 9, 16]
にはどうすればlistsquare自動更新を行うことができますか?