引用类或其他对象的其他实例的最佳方法是什么?

时间:2016-08-21 00:41:44

标签: python class

我有一个网络(对象)和节点(对象)类,每个节点属于一个不同的网络(还有连接节点等的链接对象,但让我们忽略它)。跟踪哪个对象在哪个网络中的最佳方法是什么,反之亦然?

我现在正在做的是在网络(对象)中有一个字典属性,其键是Node对象的名称,值是对象本身,还有每个节点类中的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

一切正常,我在节点和网络等之间有更多的方法和参考。我想知道这是否是跟踪对象关系的最佳方式,最佳实践是什么等等。 / p>

1 个答案:

答案 0 :(得分:0)

这是在一次执行时跟踪合理数量的条目的好方法。但如果你想让它持久,那就不行了。

如果你可以通过一些有价值的财产订购节点,你会得到更好的方法。 +它可以很容易持久

例如我自己有这个问题。我试图在lua上实现javascript函数setTimeout。

我认为每次通话时返回ID都会增加1。所以有间接方法来引用一个条目。

更重要的是我的用法。我只需要查看哪个条目是要调用的条目。所以我按执行时间对条目进行了排序。

另一种方法是在插入新条目时对条目进行排序。当我们有一个有序列表。添加新的入门成本O(log(n))。通过使用二分搜索并在适当的位置插入。