pickle python 类实例

2 python pickle

我有一个简单的类来存储与这样的电路板关联的数据:

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
Run Code Online (Sandbox Code Playgroud)

我在另一个类中使用 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()
Run Code Online (Sandbox Code Playgroud)

当我调用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
Run Code Online (Sandbox Code Playgroud)

这个 boardClass 是一个非常简单的容器。为什么不能腌制?

jsb*_*eno 5

不是从“无”继承,而是从“对象”继承——这样你的类将不再是“类实例”——它将成为新式类的正确实例,因此,是“可挑选的”

换句话说,只需尝试更改此行:

class boardClass():
Run Code Online (Sandbox Code Playgroud)

对此:

class boardClass(object):
Run Code Online (Sandbox Code Playgroud)

更新:这个答案来自 Python 2 时代 - 那里需要显式继承对象。在 Python 3 中,情况不再如此:继承object自是自动的,如果 pickle 失败则是出于其他原因。