2016-08-21 112 views
0

我有一個網絡(對象)和節點(對象)類,每個節點屬於不同的網絡(也有鏈接對象,連接節點等,但讓我們忽略這一點)。跟蹤哪個對象在哪個網絡中的最佳方式是什麼?反之亦然?引用類或其他對象的其他實例的最佳方法?

我現在在做的是在網絡(對象)中有一個字典屬性,其中的鍵是節點對象的名稱,值是對象本身,並且還在每個節點類中都有一個networkidx屬性,以及networkidx作爲關鍵字的全局網絡字典,以及Network對象作爲值。

這是一個最小的例子。網絡具有內部時鐘,當節點被激活時,它檢索網絡的時間並將其作爲時間戳存儲在節點上。

class Network(object): 
    def __init__(self, networkidx): 
     self.networkidx = networkidx 
     self.nodes = {} 
     self.internalclock = 1 

    def create_node(self, nodeidx): 
     self.nodes[nodeidx] = Node(self.networkidx, nodeidx) 

    def pass_time(self, time): 
     self.internalclock = self.internalclock + time 


class Node(object): 
    def __init__(self, networkidx, nodeidx): 
     self.networkidx = networkidx 
     self.nodeidx = nodeidx 
     self.activation_timestamps = [] 

    def activate(self): 
     current_time = networks[self.networkidx].internalclock 
     self.activation_timestamps.append(current_time) 


networks = {} 
networks['net1'] = Network('net1') 
networks['net1'].create_node('node1') 
networks['net1'].nodes['node1'].activate() 
networks['net1'].pass_time(10) 
networks['net1'].nodes['node1'].activate() 
print networks['net1'].nodes['node1'].activation_timestamps 

一切都運行得很好,我有節點和網絡等之間更多的方法和引用我想知道這是否是跟蹤對象關係的最好方法,什麼是最好的做法等等。

回答

0

這是在一次執行時跟蹤合理的條目數量的好方法。但是,如果你想讓它堅持下去,那就不行了。

如果你可以通過一些有價值的財產來訂購節點,你有更好的方法。 +它可以很容易地執行

例如我自己有這個問題。我試圖在lua上實現javascript函數setTimeout。

我認爲的方式是每次調用時返回ID都會增加1。所以有間接的方法來引用一個條目。

更重要的是我的用法。我只需要看看哪個條目是要打電話的。所以我根據執行時間對條目進行了排序。

另一種方法是在插入新條目時對條目進行排序。當我們有一個有序的列表。增加新的入場費用O(log(n))。通過使用平分搜索並在適當的地方插入。