4

有关应用程序体系结构的小问题:python全局对象缓存

我有一个python脚本,作为守护进程运行。

里面我有很多的对象,都从一个类继承(让我们将其命名为“实体”)

我也有一个主要对象,让它成为“topsys”

实体通过对鉴定( id,type(= class,粗略)),并且它们以许多恶意的方式相连。它们也一直创建和删除,并且需要访问其他实体。

所以,我需要一种存储,基本上字典词典(每种类型),持有的所有实体。

,问题是,什么是更好的:连接这个字典“topsys”作为一个对象的属性或类实体,作为类的属性?我会选择第二个(所以实体不需要知道'topsys'的存在),但是我对直接在类中使用属​​性感觉不好。或者,也许有另一种方式?

回答

6

有没有足够的细节在这里可以肯定的什么是最好的,但一般我会存储实际的对象注册表作为顶级模块级(全局)变量,并在基类的方法访问它。

_entities = [] 
class entity(object): 
    @staticmethod 
    def get_entity_registry(): 
     return _entities 

或者,完全隐藏_entites并暴露一些方法,例如。 get_object_by_id,register_object,所以你可以稍后更容易地更改_entities本身的存储。顺便提一下,如果你不在那里,你可能会想要查看weakrefs这样的对象注册表。

+0

这正是我在做什么,感谢确认:) - 和weakref的荣誉,这正是我所需要的 – 2010-10-10 21:34:57

0

使用类的属性没有问题。类也只是对象。

在你的情况,可用这个小信息,我会去一个类属性,也因为没有创建依赖北京时间巨大,将是一个少担心有时更高版本。