有一个基于RenPy的游戏,它为一些游戏对象使用自定义Python类。 最近我们将一些模块和类重命名为重构的一部分。由于Pickle无法找到课程,因此打破了旧游戏的加载。
Pickle本身支持一种机制,可以通过类重命名来正确处理情况:https://wiki.python.org/moin/UsingPickle/RenamingModules
但是我无法将此代码应用于RenPy游戏,因为保存/加载过程由RenPy在其loadsave.py
模块中控制。有没有办法在不修补RenPy代码的情况下修复加载?任何monkeypatch想法?
答案 0 :(得分:1)
当我在Ren中移动东西时,我通常会做什么?Py只是创建一个别名,从类的旧名称到新名称。这对于pickle来说已经足够了 - 它会查找旧名称,并使用新名称创建一个类。
例如,如果我有
class OldClass(object):
pass
并希望将其重命名为NewClass,我会得到代码:
class NewClass(object):
pass
OldClass = NewClass
这也适用于模块。