python全局对象缓存

时间:2010-10-09 01:48:26

标签: python design-patterns global-variables class-design

关于应用程序架构的小问题:

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

里面我有很多对象,都是从一个类继承的(让我们把它命名为'entity')

我还有一个主要对象,让它成为'topsys'

实体由pair(id,type(= class,粗略))标识,并且它们以许多邪恶的方式连接。它们也一直在创建和删除,并且需要访问其他实体。

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

问题是,更好的是:将此词典作为对象属性或类实体附加到'topsys',作为类的属性?我会选择第二个(所以实体不需要知道'topsys'的存在),但我不喜欢直接在类中使用属​​性。或许还有另一种方式?

2 个答案:

答案 0 :(得分:6)

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

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

或者,完全隐藏_entites并暴露一些方法,例如。 get_object_by_idregister_object,因此您可以稍后更轻松地更改_entities本身的存储空间。

顺便提一下,如果你不在那里,请提示:在创建像这样的对象注册表时,你可能想要查看weakrefs

答案 1 :(得分:0)

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

在你的情况下,有了这些可用的小信息,我也会选择一个类属性,因为不创建依赖关系不是很好,有时候会更少担心。