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

Python pickle反序列化类实例时出现Property object at 0x错误如何解决?

问题根因

你在要序列化的TCPmodule实例中存储了socket套接字对象,套接字属于操作系统级资源,不支持pickle序列化,会导致整个实例的序列化/反序列化过程异常:原本属于类级别的@property装饰器属性被错误当成实例属性序列化,反序列化后实例直接持有header、user等property对象,访问时不会触发getter逻辑返回底层的_header、_user值,就会出现你看到的Property object at 0x输出。

解决方案

  • 第一步:移除TCPmodule中不需要序列化的socket属性
    你不需要把客户端的socket传给服务端,服务端本身持有对应的客户端连接套接字,直接删除withSocket方法中self.socket = socket这行即可,避免不可序列化对象干扰整个序列化流程。
  • 第二步:补充TCPmodule的初始化方法,显式声明底层存储属性
    给类添加__init__方法提前初始化带下划线的私有属性,避免反序列化时属性缺失:
    class TCPmodule:
        def __init__(self):
            self._header = ""
            self._content = ""
            self._user = ""
            self.port = 0
    
        def withSocket(self, header, content, socket):
            self.header = header
            self.content = content
            # 删掉socket赋值逻辑
            # self.socket = socket
            self.user = ""
            self.port = 0
            return self
    
        # 原有@property相关代码保持逻辑不变
    
  • 第三步:确保服务端和客户端的TCPmodule类定义完全一致
    两端必须都保留完整的@property装饰器定义,不能出现一端有property、另一端直接用普通属性的情况。

验证方法

修改完成后,服务端反序列化后可以临时加一行打印print(message._header),如果能正常输出预期的user-login字符串,说明修复成功,后续直接用message.header访问即可。

内容的提问来源于stack exchange,提问作者chocreme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:10