擅长:python、mysql、java
<p>根据定义,safe_load似乎不允许反序列化您自己的类。如果你想安全,我会这样做:</p>
<pre><code>import yaml
class User(object):
def __init__(self, name, surname):
self.name= name
self.surname= surname
def yaml(self):
return yaml.dump(self.__dict__)
@staticmethod
def load(data):
values = yaml.safe_load(data)
return User(values["name"], values["surname"])
user = User('spam', 'eggs')
serialized_user = user.yaml()
print "serialized_user: %s" % serialized_user.strip()
#Network
deserialized_user = User.load(serialized_user)
print "name: %s, sname: %s" % (deserialized_user.name, deserialized_user.surname)
</code></pre>
<p>这里的优点是您可以绝对控制类的(反)序列化方式。这意味着您不会通过网络获得随机可执行代码并运行它。缺点是您可以绝对控制类的(反)序列化方式。这意味着你得做更多的工作。;-)</p>