为了保留锚点名称,我们可以使用ruamel.yaml类库提供的preserve_quotes和preserve_yaml_anchor的函数。我们需要在dumper和loader中启用这些函数。
代码示例:
import ruamel.yaml as yaml
class MyClass:
def __init__(self):
self.a = 1
self.b = 2
def __getstate__(self):
state = self.__dict__.copy()
return state
def __setstate__(self, state):
self.__dict__.update(state)
data = {"obj": MyClass()}
yaml_str = yaml.dump(data, Dumper=yaml.RoundTripDumper, preserve_quotes=True,
preserve_yaml_anchor=True)
new_data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)
print(new_data["obj"].a) # output: 1
在上面的代码示例中,我们使用了RoundTripDumper和RoundTripLoader来保留锚点名称。同时设置preserve_quotes和preserve_yaml_anchor使它们在转储和载入过程中被保留。最后,我们利用新的数据验证了是否成功载入了锚点名称。