python - 如何保存属性也是对象并且在多个级别上的python对象?
问题描述
您好,我使用 pygame 在 Python 中制作了一个国际象棋游戏。
为此,我制作了一个我也制作的“国际象棋游戏”类的对象。现在我想保存游戏,以便我们以后可以下棋。
我知道可以使用 pickle(或其他模块,如 json 和 hdf5)来保存我的游戏。我知道,如果我在 pickle.dump 方法的参数中提供变量的字典,pickle 只能让我保存对象。
问题如下: 如何保存属性也是对象并且在多个级别上的python对象?
为了解释我自己:我已经制作了我的“国际象棋”类的一个对象,其属性包含其他对象。
例如,“棋盘”是国际象棋的一个属性,是我的“棋盘”类的一个对象,棋盘也包含对象,其中一个是所有棋子的网格(它是一个由列表中的列表组成的矩阵)并且网格的每个元素都是我的“片”类的对象“片”。
那么有没有一种简单的方法来保存我所有的游戏属性而不必分解每个对象来获取它们的字典?如果是,是否可以根据需要多次保存包含其他对象的对象?
非常感谢您!: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
推荐阅读
- c++ - initializer_list、构造函数和大括号初始化
- laravel - 如何使用用户昵称创建路由组
- python - 在 Windows 上,Tensorflow 导入崩溃 Python 而没有任何错误
- java - Geckodriver 突然开始失败
- laravel - 如何设置日期,相隔n天
- laravel - 如何通过连接两个表获取数据时获取不同的单列值
- scala - KafkaUtils.createRDD的简单Spark Structured Streaming等价物,即通过指定偏移量将kafka主题读取到RDD?
- reactjs - 如何在 reactjs 中创建分页模式
- elasticsearch - 为什么我的 Kibana 仪表板字段显示为 $metric.value?
- sql - 在 SQL 查询中仅包括转换状态