我想以模块化的方式执行一些对象图的序列化。那就是我不想序列化整个图。原因是这张图很大。我可以保留图表某些部分的时间戳版本,并且我可以做一些惰性访问来推迟加载我现在不需要的部分。
我想我可以用 Python 中的元编程来管理这个。但似乎元编程在 Python 中还不够强大。
这就是我现在要做的。我的图表由几个不同的对象组成。其中一些是特殊类的实例。此类描述要腌制的根对象。这就是模块化的用武之地。每次我腌制一些东西时,它都会从其中一个实例开始,我从不同时腌制其中两个。每当有对另一个实例的引用,根对象可以访问时,我用一个persistant_id 替换这个引用,从而确保我不会在同一个酸洗流中拥有它们中的两个。解封流时出现问题。我可以找到一个尚未加载的实例的persistant_id。在这种情况下,我必须等待目标实例被加载,然后才能访问它。而且我无论如何也看不到这样做:
1/ 我试图构建一个获取方法返回引用目标的访问器。不幸的是,访问器必须放在类声明中,我不能将它们分配给未腌制的对象。2/我可以将引用必须解决的地方存储在某个地方。我认为这在 Python 中是不可能的:不能保留对位置(字段或变量)的引用,只能保留对值的引用。
我的问题可能不太清楚。我仍在寻找一个清晰的配方。我尝试了其他方法,例如使用显式引用,这将是某些“引用”类的实例。不过也不是很方便。
你知道如何用 pickle 实现模块化序列化吗?我是否必须更改 Unpickler 的内部行为才能记住我需要加载剩余对象图的位置?是否有另一个库更适合实现类似的结果?