如何指定Python中反序列化(Unpickle)对象的所属类?
如何让Python识别反序列化后的对象属于Food类?
当你已经在文件顶部导入了Food类时,pickle.loads()本身就会自动处理类的识别——只要当初序列化这个chocolate对象时,它所属的Food类和你现在导入的Food类完全匹配(类名、模块路径、结构都一致),反序列化出来的chocolate自然就是Food类的实例,不用额外手动指定。
如果遇到反序列化后类型不匹配的问题,通常是这几个原因,对应解决方法如下:
- 保证序列化和反序列化时,
Food类的导入路径完全相同。比如序列化时从myapp.foods导入Food,反序列化时也得从同一个路径导入,不能换其他地方的同名类。 - 检查
Food类的定义在序列化后有没有改动,比如改了类名、增删了属性,这种情况会让pickle没法正确匹配类。 - 跨文件或跨项目反序列化时,两边的
Food类必须完全兼容,包括继承关系、属性结构这些细节。
给你个完整的示例代码:
# 导入Food类,注意路径要和序列化时一致 from my_module import Food import pickle # 执行反序列化 chocolate = pickle.loads(chocolate_pickled) # 可以验证下对象类型 print(isinstance(chocolate, Food)) # 正常会输出True
内容的提问来源于stack exchange,提问作者Conor Romano
相关产品推荐
相关产品推荐

