首页 > 解决方案 > 如何保存属性也是对象并且在多个级别上的python对象?

问题描述

您好,我使用 pygame 在 Python 中制作了一个国际象棋游戏。

为此,我制作了一个我也制作的“国际象棋游戏”类的对象。现在我想保存游戏,以便我们以后可以下棋。

我知道可以使用 pickle(或其他模块,如 json 和 hdf5)来保存我的游戏。我知道,如果我在 pickle.dump 方法的参数中提供变量的字典,pickle 只能让我保存对象。

问题如下: 如何保存属性也是对象并且在多个级别上的python对象?

为了解释我自己:我已经制作了我的“国际象棋”类的一个对象,其属性包含其他对象。

例如,“棋盘”是国际象棋的一个属性,是我的“棋盘”类的一个对象,棋盘也包含对象,其中一个是所有棋子的网格(它是一个由列表中的列表组成的矩阵)并且网格的每个元素都是我的“片”类的对象“片”。

那么有没有一种简单的方法来保存我所有的游戏属性而不必分解每个对象来获取它们的字典?如果是,是否可以根据需要多次保存包含其他对象的对象?

非常感谢您!:D

标签: pythonclassobjectsavepickle

解决方案


我相信该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

推荐阅读