基础 - 序列化
Published on
在Qlib中,类qlib.utils.serial.Serializable
是所有可序列化类(包括DataHandler
、DataSet
、Processor
、Model
等)的基类。
该类提供了以下方法进行序列化/反序列化:
- config:设置哪些属性需要/不需要序列化
- to_pickle:将对象序列化为文件
- load:类方法,将文件反序列化为对象
- general_dump:类方法,序列化任意对象。对于本类对象,调用其to_pickle方法;对于非本类对象,直接使用pickle进行序列化
该类使用以下机制灵活地控制每个属性是否需要序列化:
- _is_kept方法:判断一个属性是否需要序列化。规则如下(按优先级排序):
- 如果属性在self.config_attr中,不需要序列化
- 如果属性在self._get_attr_list(“include”)中,需要序列化
- 如果属性在self._get_attr_list(“exclude”)中,不需要序列化
- 如果self.dump_all为真,需要序列化
- 如果属性以下划线开头,不需要序列化
- config_attr字段:永远不会序列化此列表中的属性。默认为["_include", “_exclude”]
- _get_attr_list方法:获取需要序列化与不需要序列化的属性列表
- _include与include_attr字段:需要序列化的属性列表。前者存在时返回前者,不存在时返回后者
- _exclude与exclude_attr字段:不需要序列化的属性列表。前者存在时返回前者,不存在时返回后者
- dump_all属性:表示是否序列化所有属性,为否则只序列化不以下划线开头的属性(优先级最低)
- _dump_all字段:dump_all属性的底层字段。默认为default_dump_all
- default_dump_all:默认情况下是否序列化所有属性。默认为否
该类提供以下字段/方法用于选择序列化后端:
- pickle_backend字段:序列化后端名称。目前可为
pickle
或dill
- get_backend方法:类方法,获取当前序列化后端
此外,该类实现了以下方法供序列化后端调用,以完成实际的序列化/反序列化工作:
- __getstate__:获取所有需要序列化的属性
- __setstate__:设置所有需要反序列化的属性