我需要經驗豐富的程序員的建議,因爲我無法圍繞這一點進行思考。 我有以下數據結構。在更改共享子對象時更新對象中的元數據
class obj(object):
def __init__(self, data=[], meta=[]):
self.data=data
self.meta=meta
class subobj(object):
def __init__(self, data=[]):
self.data=data
說,我從它創建以下對象。
sub1=subobj([0,1,5])
sub2=subobj([0,1,6])
sub3=subobj([0,1,7])
objA=obj(data=[sub1,sub2], meta=[3,3])
objB=obj(data=[sub3,sub1], meta=[3,3])
現在我改變sub1
對第二個對象以及它的元數據進行操作。 爲了簡化,我通過obj在這裏寫這裏。瓦爾沒有二傳手/ getter方法:現在
objB.data[1].data+=[10,11]
objB.meta[1]=5
,objA.data[0]
有(明顯)改變。但objA.meta[0]
保持不變。我想要在objA.data
(在objB.data
中引起)中的值更改之後立即觸發一些func(objB.meta[1])
,並且還要更改objA.meta
。重要提示:此func()
使用來自objB的已更改sub1
的元數據。
我根本不知道如何讓每一個obj
知道所有其他obj
s表示共享相同subobj
因爲它。我可以讓func()
在知道知道壁架後觸發。我會很感激任何提示。
注:
我想通過沒有元數據那些
subobj
各地obj
小號之間,讓他們通過這些OBJ文件進行更改。元數據應該存儲在objs
中定義的信息,而不是subobj
。因此,func()
的值取決於obj
本身,但其定義與class obj
的所有obj
相同。爲簡單起見,這個
func(metadata)
可以是類似multiply3(metadata)
。我將有成千上萬的這些對象,所以我正在尋找一種相當抽象的解決方案,它不受少量對象的限制。
在當前的設計中可能嗎?我失去了如何實現這一點。
嗯,你的子對象除了'data'還有其他屬性嗎?在你的例子中,你修改了子對象的'.els'屬性。 – ppperry
如果您希望在子對象的屬性更改時通知父對象,則可以使用事件,並讓父對象在構造函數中訂閱其子事件。查看http://python-utilities.readthedocs.org/en/latest/events.html以查看它是否符合您的需求。 – user2085282
對不起。我只是以更清晰的方式重寫。它只是'objB.data [1] .data + = [10,11]'。 'subobj's只是爲了保存由不同「父」對象更新的數據。但他們本身就是對象。 – AVX