醃製蟒蛇類別實體

2024-05-04 18:59:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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是非常简单的容器。为什么不能腌制?


Tags: 数据nameselfboardmodedefcpupickle
3条回答

您不能picklePySwigObjects,但是这里有一个解决方法:Pickling objects

如果您真的想让对象在参数中不带“object”,那么可以使用像dillcloudpickle这样的序列化器,它可以序列化旧的和新的样式类实例(对于python 2.x和3.x语法)。

不是从“无”中继承,而是从“客体”中继承- 这样,您的类将不再是“类实例”-它将 新样式类的适当实例,因此是“可挑选的”

换言之,试着改变这一行:

class boardClass():

对此:

class boardClass(object):

相关问题 更多 >