python全局对象缓存

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

关于应用架构的小问题:

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

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

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

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

所以,我需要一种存储方式,基本上是字典的字典(每种类型一个),保存所有实体。

问题是,哪个更好:将此字典作为对象属性附加到“topsys”,还是作为类的属性附加到类实体?我会选择第二个(因此实体不需要知道“topsys”的存在),但我不喜欢直接在类中使用属​​性。还是有其他方法?

最佳答案

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

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

或者,完全隐藏 _entites 并公开一些方法,例如。 get_object_by_idregister_object,这样您以后可以更轻松地更改 _entities 本身的存储。

顺便提一下,如果您还没有到那里的话,有个提示:您可能需要查看 weakrefs在创建这样的对象注册表时。

关于python全局对象缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895359/

相关文章:

python - 使用 MLP 分类器,类的精度为零

python - 尝试使用 openpyxl 打开工作簿时出现 TypeError

java - 叶节点中具有自定义操作的复合模式

objective-c - @interface 括号内外声明的变量

c++ - 如何声明和定义全局变量以便从所有头文件/源文件中正确访问它们

python - pytester - testdir 找不到 pytest 插件

python - 如何使用python子进程从master获取最新的提交id(git repo)

java - 如何删除类方法中的 try/catch 重复?

java - 工厂模式和 builder 模式的结合?

java - 为什么全局变量不随同一个全局变量中的全局函数更新?安卓/Java