You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:01:45