I have two properties that contain lists. whenever any item in this list changes, I would like another list to be updated. this includes the statement obj.myProp [3] = 5. Right now, this statement calls the getter function to get the whole list, gets the third element from the list and sets it to 5. The myProp list is changed, but the second list is never updated.
here is my code
class grid(object):
def __init__(self,width=0,height=0):
self._rows=[ [None]*height for i in xrange(width) ]
self._columns=[ [None]*width for i in xrange(height) ]
@property
def rows(self):
return self._rows
@rows.setter
def rows(self,value):
self._rows=value
self._columns=self._flip(value)
@property
def columns(self):
return self._columns
@columns.setter
def columns(self,value):
self._columns=value
self._rows=self._flip(value)
@staticmethod
def _flip(args):
ans=[ [None]*len(args) for i in xrange(len(args[0])) ]
for x in range(len(args)):
for y in range(len(args[0])):
ans[y][x] = args[x][y]
return ans
and here is an example of execution.
>>> foo=grid(3,2)
>>> foo.rows
[[None, None], [None, None], [None, None]]
>>> foo.columns
[[None, None, None], [None, None, None]]
>>> foo.rows=[[1,2,3],[10,20,30]]
>>> foo.rows
[[1, 2, 3], [10, 20, 30]]
>>> foo.columns
[[1, 10], [2, 20], [3, 30]]
>>> foo.rows[0][0]=3
>>> foo.rows
[[3, 2, 3], [10, 20, 30]]
>>> foo.columns
[[1, 10], [2, 20], [3, 30]]
if you look at the last three lines, the real problem arises here. I set the first subscription element to three, but foo.column never updates itself to put list 3 on it.
, , , .
python 2.7