如何保存Python对象其属性也是对象和多层次?

问题描述 投票:-2回答:1

您好,我有使用Python中pygame的取得了棋局。

要做到这一点,我已经做了“棋局”类我也做的对象。现在我想救场,所以我们可以在以后下棋。

我知道,可以用泡菜(或其他模块,如JSON和HDF5)保存我的游戏。我知道泡菜只能让我保存对象,如果我给他们的变量dictionnaries参数的方法和pickle.dump。

问题是:如何保存Python对象其属性也是对象和多层次?

为了解释自己:我已经作出,其attributs包含其它对象我的“国际象棋”类的对象。

对于为例,“板”是国际象棋的attribut,是我的“董事会”类的一个对象,并且主板还包含对象,其中之一是所有的作品(它在列表中有一个列表所作的矩阵)组成的栅格每个网格的元件的是我的“片”的类的对象“片”。

那么,有没有一个简单的方法来拯救我的所有的游戏attributs而无需分解每个对象,以得到他们的dictionnaries?如果是的话,有可能保存包含其他对象多次,我想的对象?

非常感谢你提前! :d

python class object save pickle
1个回答
0
投票

我相信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
© www.soinside.com 2019 - 2024. All rights reserved.