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)
这样的事情会忽略与单个(领先)任何下划线
我想这是你想要的
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)
虽然一个更好的会面明确HOD(文体)
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())
这是秉承蟒蛇的口头禅是比隐
更好,如果你能以这样的方式,一个标准的'yaml.dump(T)'会做“的编辑此正确的事情',我会感激'')'我相信这将是['YAMLObject.to_yaml'](http://pyyaml.org/wiki/PYYAMLDocumentation#YAMLObject)的定制,但我不确定如何重新定义它。 (不幸的是,没有给出任何示例,并且我不太熟悉序列化作为练习。) –
我认为我的编辑可以解决您的问题 –
作为一边为什么你使用yaml?我认为它比很多其他方式来序列化数据更少见... –