我有一个简单的类来存储与这样的电路板相关联的数据:
class boardClass():
def __init__(self,boardName):
self.__name=boardName
self.__boardMappings= {boardName:{
'FastMode':
{'CPU_A':{'mipi':[], 'gpen':[]},
'CPU_B':{'mipi':[], 'gpen':[]}
'SlowMode':
{'CPU_A':{'mipi':[], 'gpen':[]},
'CPU_B':{'mipi':[], 'gpen':[]}
}
}
}
def setMode(self, board, mode, cpu,mipi,gpen):
self.__boardMappings[board][mode][cpu]['mipi']=mipi
self.__boardMappings[board][mode][cpu]['gpen']=gpen
def getName(self):
return self.__name
我在另一个类中使用pickle将boardClass
数据存储在文件中,然后读取它们:
def onSave(self,boardName):
board=boardClass.boardClass(boardName)
name=boardName+".brd"
file=open(name,"wb")
pickle.dump(board,file)
loadedBoard= pickle.load( open( file, "rb" ))
print "Loaded board name is : ",loadedBoard.getName()
当我调用onSave()
方法来pickle boardClass时,它会给出几个以结尾的错误:
File "C:\Python27\lib\copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle PySwigObject objects
这个boardClass是非常简单的容器。为什么不能腌制?
您不能pickle
PySwigObjects
,但是这里有一个解决方法:Pickling objects如果您真的想让对象在参数中不带“object”,那么可以使用像
dill
或cloudpickle
这样的序列化器,它可以序列化旧的和新的样式类实例(对于python 2.x和3.x语法)。不是从“无”中继承,而是从“客体”中继承- 这样,您的类将不再是“类实例”-它将 新样式类的适当实例,因此是“可挑选的”
换言之,试着改变这一行:
对此:
相关问题 更多 >
编程相关推荐