如何做山药安全垃圾场没有山药。山药?

2024-04-28 14:16:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用yaml.safe_dump()序列化一些对象。如何用add_representer()add_constructor()序列化Python对象。。。在

我不能补充山药对东西(第三方模块)不想使用。在

我做了这样的倾倒:

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

它工作得很好,但我不知道如何做构造器?在

^{pr2}$

它抛出异常TypeError: __init__() takes exactly 2 arguments (1 given),并且应该抛出,因为构造函数需要参数。也许还有另一种方法可以构造跳过对象的构造函数?在


Tags: 对象nameselfaddyamldata序列化init
1条回答
网友
1楼 · 发布于 2024-04-28 14:16:25

如果不提交名称,则无法构造Thing()。你能解决的 在很多方面,但是下面的方法应该有效。在

def thing_constructor(self, node):
    name = None
    for x in node.value:
        if x[0].value == 'name':
            name = x[1].value
    return Thing(name)


yaml.SafeLoader.add_constructor('!Thing', thing_constructor)

res = yaml.safe_load(safe_dump)
print res.name

您可以简化name参数的设置,但是这样,如果Thing需要更多的参数,它就更具可扩展性。在

相关问题 更多 >