我正在将python类数据转储到YAML,以便稍后加载。我发现在ruamel.yaml(和PyYAML)中,当我使用属性来管理类属性转储类时,yaml输出会更改为似乎无效的yaml语法。我将下面的代码放在一起演示该行为
import sys
import ruamel.yaml
class MySampleClass(object):
def __init__(self, attribute1, attribute2):
self.attribute1 = attribute1
self.attribute2 = attribute2
@property
def attribute1(self):
return self.attribute1
@attribute1.setter
def attribute1(self, attribute1):
self.__attribute1 = attribute1
sample1 = MySampleClass("ABCD", "123")
yaml = ruamel.yaml.YAML()
yaml.register_class(MySampleClass)
yaml.dump(sample1, sys.stdout)
运行时,将生成以下输出。正如您所看到的,修饰后的第一个属性具有意外的格式,而第二个属性是人们期望从YAML中得到的
!MySampleClass
_MySampleClass__attribute1: ABCD
attribute2: '1234'
有没有一种方法可以克服这一问题,而不必从头开始为每个类编写自定义构造函数和representer
ruamel.yaml
不会将属性/设置器作为“正常”属性处理,这就是为什么会得到有趣的输出,是有效的YAML首先,您应该更改attribute1属性,因为调用
print(sample1.attribute1)
将 让你进入无限递归然后,您可以创建一个基类,该基类具有适当的
to_yaml
方法 可用于转储所有类:其中:
相关问题 更多 >
编程相关推荐