【发布时间】:2019-01-31 02:23:28
【问题描述】:
覆盖from_yaml 是否足以从一个类中注册一个标签,还是必须使用yaml.add_constructor(Class.yaml_tag, Class.from_yaml)?如果我不使用 te add_constructor 方法,我的 YAML 标签将无法识别。我所拥有的示例:
import yaml
class Something(yaml.YAMLObject):
yaml_tag = u'!Something'
@classmethod
def from_yaml(cls,loader,node):
# Set attributes to None if not in file
values = loader.construct_mapping(node, deep=True)
attr = ['attr1','attr2']
result = {}
for val in attr:
try:
result[val] = values[val]
except KeyError:
result[val] = None
return cls(**result)
这足以让它工作吗?我对使用from_yaml 与使用我上面提到的方法注册的任何其他构造函数感到困惑。我想我缺少一些基本的东西,因为他们说:
子类化 YAMLObject 是定义标签、构造函数、 和代表你的班级。您只需要覆盖 yaml_tag 属性。如果你想定义你的自定义构造函数和 代表,重新定义 from_yaml 和 to_yaml 方法 相应地。
【问题讨论】: