【发布时间】:2015-12-30 15:14:15
【问题描述】:
我想用yaml.safe_dump() 序列化一些对象。如何使用 add_representer() 和 add_constructor() 序列化 Python 对象...
我无法将 yaml.YAMLObject 添加到 Thing(第三方模块)并且不想使用。
我做这样的转储:
import yaml
class Thing(object):
def __init__(self, name):
self.name = name
def Thing_representer(dumper, data):
return dumper.represent_mapping('!Thing', data.__dict__)
yaml.SafeDumper.add_representer(Thing, Thing_representer)
safe_dump = yaml.safe_dump(t)
print safe_dump
它工作正常,但我不知道如何做构造函数?
def Thing_constructor(loader, data):
thing = Thing()
return thing.__dict__.update(loader.construct_mapping(data))
yaml.SafeLoader.add_constructor('!Thing', Thing_constructor)
yaml.safe_load(safe_dump)
它抛出异常TypeError: __init__() takes exactly 2 arguments (1 given) 并且应该抛出异常,因为构造函数需要参数。也许还有另一种选择来构造对象跳过构造函数?
【问题讨论】:
-
您的第一个代码段中有一些虚假的换行符。当然
t = Thing()(仍然)失踪了。
标签: python python-2.7 yaml pyyaml