我希望能夠告訴我的Python對象中的數據字段自某些事件以來是否被修改過。我以爲我會實現這個 使用性質類似如下:記錄對python對象的數據成員中元素的訪問
class C(object):
def get_scores(self):
print 'getter'
return self.__scores
def set_scores(self, value):
print 'setter'
self.__scores = value
self.__scoresWereChanged = True
scores = property(get_scores, set_scores, None, None)
def do_something(self):
if self.__scoresWereChanged:
self.__updateState() #will also set self.__scoresWereChanged to False
self.__do_the_job()
這種方法效果很好,如果scores
是不可改變的,但它scores
是一個名單,我也改變單一的元素,這種方法失敗:
In [79]: c.scores = arange(10)
setter
In [80]: print c.scores
getter
Out[80]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [81]: c.scores[3] = 999
getter #setter was not called
我可以
In [84]: s = c.scores
getter
In [85]: s[3] = 2222
In [86]: c.scores = s
setter
解決這個問題,但是,當然,這不會是因爲ellegant,我想。
可以'__getattribute__'幫助你嗎?它攔截訪問對象的所有屬性 –