Python如何将对象字符串还原为原对象以调用其方法?
问题描述
我有一个对象:
c = Character(...)
通过以下代码将其转换为字符串:
p = "{0}".format(c) print(p) >>> <Character.Character object at 0x000002267ED6DA50>
请问如何将该字符串还原为原对象,以便执行p.get_name()?
解决方案
首先明确:你得到的这个字符串是对象的默认repr()输出,仅包含对象类型和内存地址,无法直接从这个字符串还原出原对象——内存地址是程序运行时的临时标识,重启程序或对象被回收后就失效,且字符串里没有保存对象的任何状态数据(比如name属性的值)。
要实现对象的序列化与反序列化,推荐以下两种方法:
方法一:使用Python标准库pickle
pickle是Python专门用于序列化Python对象的工具,能完整保存对象的状态:
import pickle # 序列化对象为字节流 serialized_data = pickle.dumps(c) # 反序列化还原对象 restored_c = pickle.loads(serialized_data) # 调用目标方法 restored_c.get_name()
注意事项:
pickle仅支持Python环境,无法跨语言使用- 反序列化时,必须确保
Character类的定义能被正常导入,且类结构(比如属性、方法)和序列化时一致,否则会反序列化失败
方法二:自定义JSON序列化(适合跨语言或可读场景)
如果需要更通用的序列化格式,可以手动将对象的关键属性转为JSON字符串,再从JSON还原:
import json # 自定义序列化函数:提取对象需要保存的属性 def serialize_char(char): return json.dumps({ "name": char.get_name(), # 可以添加其他需要保存的属性 }) # 自定义反序列化函数:从JSON数据重建对象 def deserialize_char(json_str): data = json.loads(json_str) # 假设Character类有接收对应参数的构造方法 return Character(name=data["name"]) # 使用示例 json_str = serialize_char(c) restored_c = deserialize_char(json_str) restored_c.get_name()
优势:JSON格式可读性强,支持跨语言;缺点是需要手动处理所有需要保存的对象属性,适合结构简单的对象。
内容的提问来源于stack exchange,提问作者Code Pal
相关产品推荐
相关产品推荐

