如何在重命名 pickled python class 后修复 RenPy 游戏保存加载?
How to repair RenPy game save loading after renaming pickled python class?
有一款基于 RenPy 的游戏对某些游戏对象使用自定义 Python classes。
最近我们重命名了一些模块和 classes 作为重构的一部分。这中断了旧游戏保存的加载,因为 Pickle 找不到 classes.
Pickle 本身支持一种机制来正确处理 class 重命名的情况:https://wiki.python.org/moin/UsingPickle/RenamingModules
但是我无法将此代码应用于 RenPy 游戏,因为 save/load 进程由 RenPy 在其 loadsave.py
模块中控制。有没有办法在不修补 RenPy 代码的情况下修复加载?任何 monkeypatch 想法?
当我在 Ren'Py 中移动东西时,我通常做的是从 class 的旧名称到新名称创建一个别名。这对于 pickle 来说已经足够了——它会查找旧名称,并使用新名称创建一个 class。
例如,如果我有
class OldClass(object):
pass
并想将其重命名为 NewClass,我需要代码:
class NewClass(object):
pass
OldClass = NewClass
这也适用于跨模块。
有一款基于 RenPy 的游戏对某些游戏对象使用自定义 Python classes。 最近我们重命名了一些模块和 classes 作为重构的一部分。这中断了旧游戏保存的加载,因为 Pickle 找不到 classes.
Pickle 本身支持一种机制来正确处理 class 重命名的情况:https://wiki.python.org/moin/UsingPickle/RenamingModules
但是我无法将此代码应用于 RenPy 游戏,因为 save/load 进程由 RenPy 在其 loadsave.py
模块中控制。有没有办法在不修补 RenPy 代码的情况下修复加载?任何 monkeypatch 想法?
当我在 Ren'Py 中移动东西时,我通常做的是从 class 的旧名称到新名称创建一个别名。这对于 pickle 来说已经足够了——它会查找旧名称,并使用新名称创建一个 class。
例如,如果我有
class OldClass(object):
pass
并想将其重命名为 NewClass,我需要代码:
class NewClass(object):
pass
OldClass = NewClass
这也适用于跨模块。