使用 PyYAML 序列化对象时如何忽略成员?

编程入门 行业动态 更新时间:2024-10-10 10:28:14
本文介绍了使用 PyYAML 序列化对象时如何忽略成员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

如何在序列化这个对象时忽略成员Trivial._ignore?

How can ignore the member Trivial._ignore when serializing this object?

import yaml class Trivial(yaml.YAMLObject): yaml_tag = u'!Trivial' def __init__(self): self.a = 1 self.b = 2 self._ignore = 3 t = Trivial() print(yaml.dump(t))

印刷品

!Trivial _ignore: 3 a: 1 b: 2

推荐答案

def my_yaml_dump(yaml_obj): my_ob = deepcopy(yaml_obj) for item in dir(my_ob): if item.startswith("_") and not item.startswith("__"): del my_ob.__dict__[item] return yaml.dump(my_ob)

这样的事情会忽略带有单个(前导)下划线的任何内容

something like this would ignore anything with a single (leading) underscore

我想这就是你想要的

class Trivial(yaml.YAMLObject): yaml_tag = u'!Trivial' def __init__(self): self.a = 1 self.b = 2 self._ignore = 3 @classmethod def to_yaml(cls, dumper, data): # ... my_ob = deepcopy(data) for item in dir(my_ob): if item.startswith("_") and not item.startswith("__"): del my_ob.__dict__[item] return dumper.represent_yaml_object(cls.yaml_tag, my_ob, cls, flow_style=cls.yaml_flow_style)

虽然是更好的方法(风格上)

although a better method (stylistically)

class SecretYamlObject(yaml.YAMLObject): hidden_fields = [] @classmethod def to_yaml(cls,dumper,data): new_data = deepcopy(data) for item in cls.hidden_fields: del new_data.__dict__[item] return dumper.represent_yaml_object(cls.yaml_tag, new_data, cls, flow_style=cls.yaml_flow_style) class Trivial(SecretYamlObject): hidden_fields = ["_ignore"] yaml_tag = u'!Trivial' def __init__(self): self.a = 1 self.b = 2 self._ignore = 3 print yaml.dump(Trivial())

这是秉承python的口头禅,显式优于隐式

this is adhering to pythons mantra of explicit is better than implicit

更多推荐

使用 PyYAML 序列化对象时如何忽略成员?

本文发布于:2023-11-06 02:00:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1562433.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   成员   序列化   PyYAML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!