如何保存一个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