Как сохранить объект python, атрибуты которого также являются объектами и которые находятся на нескольких уровнях? - PullRequest
0 голосов
/ 08 февраля 2019

Здравствуйте, я сделал шахматную игру на Python с использованием pygame.

Для этого я создал объект класса "шахматной игры", который я также сделал.Теперь я хотел бы сохранить игры, чтобы мы могли играть в шахматы позже.

Я знаю, что для сохранения моих игр можно использовать pickle (или другие модули, такие как json и hdf5).Я знаю, что pickle может позволить мне сохранять объекты, только если я даю их словари переменных в параметре для метода pickle.dump.

Проблема заключается в следующем: Как сохранить питонаобъект, чьи атрибуты также являются объектами, и которые находятся на нескольких уровнях?

Для объяснения: я создал объект своего класса "Шахматы", атрибуты которого содержат другие объекты.

Например, "доска""является атрибутом шахмат и является объектом моего класса" Board ", и доска также содержит объекты, одним из которых является сетка всех фигур (это матрица, созданная со списком в списке) и каждый элементсетка - это объектный "кусок" моего класса "Piece".

Так есть ли простой способ сохранить все игровые атрибуты без необходимости разложения каждого объекта для получения своих словарей?и если да, возможно ли сохранять объекты, содержащие другие объекты, столько раз, сколько я хочу?

Заранее большое спасибо!: D

1 Ответ

0 голосов
/ 08 февраля 2019

Я считаю, что модуль 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
...