您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我为什么不能Pickle这个物体?

我为什么不能Pickle这个物体?

您的代码有几个较小的“附带”问题:测试中使用的类名中突然出现“ Transport”(不是您要定义的类名),将内置标识符践踏file为本地时令人怀疑变量(不要那样做- 在这里并没有什么坏处,但是践踏内置标识符的习惯有一天会引起神秘的错误),这种错误Mock已经被注意到,认使用最慢的速度,最脏的腌制协议和文本,而不是腌制文件的二进制文件

但是,正如@coonj所说,最根本的是缺乏状态控制。一个“普通”类不需要它(因为self.__dict__在缺少状态控制且没有其他特性的类中,认情况下它会被腌制和去腌制),但是因为您要重写__getattr__,所以这不适用于您的类。您只需要另外两种非常简单的方法

def __getstate__(self): return self.__dict__
def __setstate__(self, d): self.__dict__.update(d)

它基本上告诉pickle您将类self.__dict__视为普通类,尽管存在,但仍代表整个实例状态__getattr__

其他 2022/1/1 18:42:10 有462人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶