import pickleclass NoClass(): def __init__(self, name, level, cls, time_played): self.name = name self.level = level self.cls = cls self.time_played = time_playeddef Write_char_file(registered_username): avatar = NoClass('',1,'',0) #--------i am trying to pickle and write this a = str('Characters\%s.txt' % registered_username) #---- the saving file f = open(a, 'wb') f.write(pickle.dumps(avatar)) f.close()def Asign_to_slot(char_lst): passAsign_to_slot(Write_char_file('my_name'))当尝试在bge中运行它时,当我使用python IDLE运行它时,它会引发该错误,但没有问题,尽管我知道通常无法对这些类进行腌制,但我还是设法在文件中写入了腌制的类,然后我什至可以管理打开文件,解开文件并打印类的属性"_pickle.PicklingError: Can't pickle <class '__main__.NoClass'>: attribute lookup NoClass on __main__ failed"
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
由于此方法在Blender中运行时有效,并且仅在游戏引擎中失败,因此我认为这与在游戏引擎python绑定中进行的优化有关。
遵循处理有状态对象的示例并添加自定义项__getstate__
也失败,这表明游戏引擎可能实现了自定义项,__slots__
以仅提供最少的功能集。
解决方案似乎是__dict__
直接对对象进行酸洗,然后还可以对新实例进行修补__dict__
。
f.write(pickle.dumps(avatar.__dict__))
添加回答
举报
0/150
提交
取消