: attribute lookup "a class"on __main__ failed-6ren"> : attribute lookup "a class"on __main__ failed-import pickle class NoClass(): def __init__(self, name, level, cls, time_played): self.n-6ren">
gpt4 book ai didi

Python - Blender Game Engine : _pickle. PicklingError: Can't pickle : attribute lookup "a class"on __main__ failed

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:00 28 4
gpt4 key购买 nike

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'))

When trying to run this in bge it raises that error BUT when i run it with python IDLE there isn't a problem and i manage to write the pickled class in the file though i know classes usually can't be pickled then i even manage to open the file, unpickle it and print the class' attributes

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

最佳答案

由于这在 blender 中运行时有效并且仅在游戏引擎中失败,我认为这与游戏引擎 python 绑定(bind)中的优化有关。

handling stateful objects 之后示例和添加自定义 __getstate__ 也失败,表明游戏引擎可能实现自定义 __slots__仅提供最小的功能集。

解决方案似乎是直接 pickle 对象 __dict__,然后您还需要 unpickle 到新实例 __dict__

f.write(pickle.dumps(avatar.__dict__))

关于Python - Blender Game Engine : _pickle. PicklingError: Can't pickle <class '__main__."a class "'>: attribute lookup "a class"on __main__ failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com