【发布时间】:2012-04-24 23:54:46
【问题描述】:
我有一个简单的类来存储与电路板相关的数据,如下所示:
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() 方法来腌制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 是一个非常简单的容器。为什么不能腌制?
【问题讨论】:
-
PEP 8 希望您将您的班级命名为
Board(不是BoardClass,因为您知道这是一个班级)、setModeset_mode等。还有冒号后的空格分配中=周围的字典文字和空格。最后,你应该class Board(object)让它成为一个新式的类。 -
您的代码没有意义。
onSave定义在哪个类中?boardName在onSave中定义在哪里?PySwigObject来自哪里(显然您在董事会中做的比您展示的要多)? -
Chris,onSave() 在另一个类中定义的位置无关紧要,当用户想要保存电路板时会调用它。(或腌制它的代码)我不知道在哪里PySwigObject 来自我的代码中没有它,而对于泡菜部分,这就是所有代码。做类 Board(object) 也没有解决任何问题。
-
好吧,有了你得到的代码,它就可以工作了。 (试试看。)您在某个地方还有其他重要的代码没有显示。我的第一条评论(几乎)纯粹是关于文体问题。除了新样式的类位(它将修复一些不知名的地方的奇怪行为),它不会改变任何功能。
-
可腌制是通过新样式类修复的“奇怪行为”的一部分。