关于应用架构的小问题:
我有一个 python 脚本,作为守护进程运行。
我里面有很多对象,都继承自一个类(我们将其命名为“实体”)
我还有一个主要对象,让它成为'topsys'
实体由对(id,类型(= class,大致))标识,并且它们以许多邪恶的方式连接。它们也一直在创建和删除,并且需要访问其他实体。
所以,我需要一种存储方式,基本上是字典的字典(每种类型一个),保存所有实体。
问题是,哪个更好:将此字典作为对象属性附加到“topsys”,还是作为类的属性附加到类实体?我会选择第二个(因此实体不需要知道“topsys”的存在),但我不喜欢直接在类中使用属性。还是有其他方法?
最佳答案
这里没有足够的细节来确定什么是最好的,但一般来说,我会将实际的对象注册表存储为顶级类中的模块级(全局)变量,并在基类中有一个方法来访问
_entities = []
class entity(object):
@staticmethod
def get_entity_registry():
return _entities
或者,完全隐藏 _entites 并公开一些方法,例如。 get_object_by_id
,register_object
,这样您以后可以更轻松地更改 _entities 本身的存储。
顺便提一下,如果您还没有到那里的话,有个提示:您可能需要查看 weakrefs在创建这样的对象注册表时。
关于python全局对象缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895359/