¿Cómo puedo ignorar un miembro al serializar un objeto con PyYAML?

¿Cómo puede ignorar el miembro Trivial._ignore al serializar este objeto?

 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)) 

huellas dactilares

 !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) 

algo como esto ignoraría cualquier cosa con un solo guión bajo (principal)

Creo que esto es lo que quieres

 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) 

Aunque un método mejor (estilísticamente).

 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()) 

esto se adhiere a Pythons Mantra de explícito es mejor que implícito