猿问

Python-Blender Game Engine:_pickle.PicklingError:

import pickle


class NoClass():

    def __init__(self, name, level, cls, time_played):

        self.name = name

        self.level = level

        self.cls = cls

        self.time_played = time_played


def 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):

    pass


Asign_to_slot(Write_char_file('my_name'))

当尝试在bge中运行它时,当我使用python IDLE运行它时,它会引发该错误,但没有问题,尽管我知道通常无法对这些类进行腌制,但我还是设法在文件中写入了腌制的类,然后我什至可以管理打开文件,解开文件并打印类的属性


"_pickle.PicklingError: Can't pickle <class '__main__.NoClass'>: attribute lookup NoClass on __main__ failed"


慕标5832272
浏览 218回答 1
1回答

白板的微信

由于此方法在Blender中运行时有效,并且仅在游戏引擎中失败,因此我认为这与在游戏引擎python绑定中进行的优化有关。遵循处理有状态对象的示例并添加自定义项__getstate__也失败,这表明游戏引擎可能实现了自定义项,__slots__以仅提供最少的功能集。解决方案似乎是__dict__直接对对象进行酸洗,然后还可以对新实例进行修补__dict__。f.write(pickle.dumps(avatar.__dict__))
随时随地看视频慕课网APP

相关分类

Python
我要回答