【发布时间】:2012-10-02 11:17:40
【问题描述】:
我可以使用 YAML 转储 python 对象的层次结构,所以:
import yaml
class C():
def __init__(self, x, y):
self.x = x
self.y = y
class D():
def __init__(self, c, d):
self.c = c
self.d = d
d = D(c=C(x=1, y='hi'),
d='bye')
print yaml.dump(d)
产生输出:
!!python/object:__main__.D
c: !!python/object:__main__.C {x: 1, y: hi}
d: bye
但我想选择性地隐藏一些属性。所以假设我有一个函数attribs_to_dump(obj),它对于任何对象都返回我要转储的属性名称列表,例如:
def attribs_to_dump(obj):
if obj.__class__ == C: return ['x']
if obj.__class__ == D: return ['c']
我的问题是,如何将attribs_to_dump 挂钩到yaml.dump 以便获得以下输出?
!!python/object:__main__.D
c: !!python/object:__main__.C {x: 1}
有一个复杂的因素:我想通过挂钩到 Yaml 来实现效果,因为它在对象层次结构上爬行,而不是通过自己预处理对象层次结构。原因是由于我正在使用的某些库中存在setattr/getattr/__dict__ 魔法,并非层次结构中的所有对象都易于自省:-(...
非常感谢所有帮助!
【问题讨论】:
标签: python serialization yaml pyyaml