gpt4 book ai didi

Python - 如何使这个不可 pickle 的对象可 pickle ?

转载 作者:太空狗 更新时间:2023-10-30 00:55:12 28 4
gpt4 key购买 nike

所以,我有一个对象,里面有很多不可 pickle 的东西(pygame 事件、orderedDicts、时钟等),我需要将它保存到磁盘。

事情是,如果我可以让这个东西存储一个有进度的字符串(我只需要一个整数),那么我可以将它传递给对象的 init,它会重建所有这些东西。不幸的是,我正在使用的框架 (Renpy) pickle 对象并尝试加载它,尽管我可以将它保存为单个整数,但我无法更改它。

所以,我要问的是,我如何覆盖方法,以便每当 pickle 尝试保存对象时,它只保存进度值,而每当它尝试加载对象时,它从进度值?

我看过一些关于 __repr__ 方法的讨论,但我不确定在我的情况下如何使用它。

最佳答案

您要找的钩子(Hook)是__reduce__ .它应该返回一个 (callable, args) 元组; callableargs 将被序列化,反序列化时,对象将通过 callable(*args) 重新创建。如果您的类的构造函数采用 int,则可以将 __reduce__ 实现为

class ComplicatedThing:
def __reduce__(self):
return (ComplicatedThing, (self.progress_int,))

您可以将一些可选的额外内容放入元组中,当您的对象图具有循环依赖性时最有用,但您在这里不需要它们。

关于Python - 如何使这个不可 pickle 的对象可 pickle ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com