擅长:python、mysql、java
<p>另一种方式存在。来自PyYaml文档:</p>
<blockquote>
<p>A python object can be marked as safe and thus be recognized by yaml.safe_load. To do this, derive it from yaml.YAMLObject [...] and explicitly set its class property yaml_loader to yaml.SafeLoader.</p>
</blockquote>
<p>您还必须设置yaml_tag属性才能使其工作。</p>
<p>YAMLObject使用一些元类魔术使对象可加载。注意,如果这样做,对象将只能由安全加载程序加载,而不能使用常规的yaml.load()加载。</p>
<p>工作示例:</p>
<pre><code>import yaml
class User(yaml.YAMLObject):
yaml_loader = yaml.SafeLoader
yaml_tag = u'!User'
def __init__(self, name, surname):
self.name= name
self.surname= surname
user = User('spam', 'eggs')
serialized_user = yaml.dump(user)
#Network
deserialized_user = yaml.safe_load(serialized_user)
print "name: %s, sname: %s" % (deserialized_user.name, deserialized_user.surname)
</code></pre>
<p>这个方法的优点是很容易实现;缺点是它只在安全加载的情况下工作,并且用序列化相关的属性和元类扰乱类。</p>