如何保存一个python的对象,其属性也是对象,而且是多层次的?
How to save a python object whose attributes also are objects and that on multiple levels?
你好,我用pygame在Python做了一个国际象棋游戏。
为此,我制作了一个 "chess game" class 对象。
现在我想保存游戏,以便我们以后下棋。
我知道可以使用 pickle(或 json 和 hdf5 等其他模块)来保存我的游戏。
我知道如果我在 pickle.dump 方法的参数中给出它们的变量字典,pickle 只能让我保存对象。
问题如下:
如何保存一个python属性也是对象的多层次对象?
自我解释:
我为我的 "Chess" class 创建了一个对象,其属性包含其他对象。
例如,"board"是国际象棋的一个属性,是我的"Board"class的一个对象,
并且板还包含对象,
其中之一是所有部分的网格(它是一个由列表中的列表组成的矩阵),网格的每个元素都是我的 "Piece" class 的一个对象 "piece"。
那么有没有一种简单的方法可以保存我所有的游戏属性,而不必分解每个对象来获取它们的字典?
如果是,是否可以根据需要多次保存包含其他对象的对象?
非常感谢您! :D
我相信 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
你好,我用pygame在Python做了一个国际象棋游戏。
为此,我制作了一个 "chess game" class 对象。 现在我想保存游戏,以便我们以后下棋。
我知道可以使用 pickle(或 json 和 hdf5 等其他模块)来保存我的游戏。 我知道如果我在 pickle.dump 方法的参数中给出它们的变量字典,pickle 只能让我保存对象。
问题如下: 如何保存一个python属性也是对象的多层次对象?
自我解释: 我为我的 "Chess" class 创建了一个对象,其属性包含其他对象。
例如,"board"是国际象棋的一个属性,是我的"Board"class的一个对象, 并且板还包含对象, 其中之一是所有部分的网格(它是一个由列表中的列表组成的矩阵),网格的每个元素都是我的 "Piece" class 的一个对象 "piece"。
那么有没有一种简单的方法可以保存我所有的游戏属性,而不必分解每个对象来获取它们的字典? 如果是,是否可以根据需要多次保存包含其他对象的对象?
非常感谢您! :D
我相信 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