如何保存属性也是对象并且在多个级别上的python对象?
Posted
技术标签:
【中文标题】如何保存属性也是对象并且在多个级别上的python对象?【英文标题】:How to save a python object whose attributes also are objects and that on multiple levels? 【发布时间】:2019-02-07 23:02:25 【问题描述】:你好,我用 Python 用 pygame 做了一个国际象棋游戏。
为此,我制作了一个我也制作的“国际象棋游戏”类的对象。 现在我想保存游戏,以便我们以后下棋。
我知道可以使用 pickle(或其他模块,如 json 和 hdf5)来保存我的游戏。 我知道,如果我在 pickle.dump 方法的参数中提供变量的字典,pickle 只能让我保存对象。
问题如下: 如何保存一个python对象,它的属性也是对象并且是多层次的?
解释一下自己: 我已经创建了我的“国际象棋”类的对象,其属性包含其他对象。
例如,“棋盘”是国际象棋的一个属性,是我的“棋盘”类的一个对象, 并且板还包含对象, 其中一个是所有片段的网格(它是由列表中的列表组成的矩阵),网格的每个元素都是我的“片段”类的对象“片段”。
那么有没有一种简单的方法可以保存我所有的游戏属性,而不必分解每个对象来获取它们的字典? 如果是,是否可以根据需要多次保存包含其他对象的对象?
提前非常感谢您! :D
【问题讨论】:
使用shelve
模块。
哇!很简单,非常感谢。
【参考方案1】:
我相信pickle
模块实际上可以根据您描述的对象层次结构正确序列化您的对象:
In [1]: import pickle
In [2]: class Piece():
...: def __init__(self, name):
...: self.name = name
...:
In [3]: class Board():
...: def __init__(self, pieces):
...: self.pieces = pieces
...:
In [4]: board = Board([Piece("knight"), Piece("king")])
In [5]: save = pickle.dumps(board)
In [6]: restored_board = pickle.loads(save)
In [7]: for piece in restored_board.pieces:
...: print(piece.name)
...:
knight
king
【讨论】:
以上是关于如何保存属性也是对象并且在多个级别上的python对象?的主要内容,如果未能解决你的问题,请参考以下文章