为了账号安全,请及时绑定邮箱和手机立即绑定

Python-Blender Game Engine:_pickle.PicklingError:

Python-Blender Game Engine:_pickle.PicklingError:

慕标5832272 2021-04-09 14:38:20
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__))


查看完整回答
反对 回复 2021-04-27
  • 1 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信