【发布时间】:2013-11-21 11:07:38
【问题描述】:
我必须序列化一个动态创建的类层次结构。还有一堆对象 - 后者类的实例。
Python pickle 没有太大帮助,它的 wiki 说“类......不能被腌制”。 O 可能有一些我想不出来的技巧。
性能要求:
反序列化应该很快,因为序列化的人员用于缓存,应该可以节省我创建相同类层次结构的工作。
详情:
类是使用类型动态创建的,有时使用元类。
【问题讨论】:
-
你有类的实例,你可以腌制那些就好了。
-
是类本身,Pickle 期望从源代码加载。如果您生成类本身的方式使它们无法从导入中加载,那么您不能使用 pickle。
-
如果你能做到
from module import classname,即使是动态创建的类也可以腌制。 -
@Martijn Pieters 不,我没有包含类的模块,我动态构建它们,它们的名称,属性,一切
-
如果您动态创建类,那么您需要设计一种方法来从序列化信息中重新创建这些类,然后反序列化实例。这将是一项完全自定义的工作,也许可以由
object.__reduce__()hook 处理;它在处理 unpickling 方面为您提供了很大的灵活性;例如不再要求可以导入类本身。
标签: python class serialization hierarchy