据我所知,在序列化对象时,使用serpent比pickle更安全。
我使用以下类:
import serpent
class Test:
def save(self, fileName) :
ser = serpent.dumps({"schema": self}, indent=True)
open(fileName, "wb" ).write(ser)
def load(self, fileName) :
self = serpent.load(open(fileName, "rb"))["schema"]
def someFunction(self) :
[...]我希望能够做一些像这样的事情
test = Test()
test.save("afile")
[...]
test2 = Test().load()
test2.someFunction()但是,当我调用Test().load()时,我得到的是对象树,而不是对象。所以我不能用它。如何从对象树中获取对象?这样做,我是否会得到完全相同的安全问题,我有与泡菜?
编辑:从Python : serpent序列化为Pyro's doc文字表达式。接受相当多的不同类型。许多将被序列化为字典。如果需要的话,您可能需要在接收端显式地将文字转换回特定的类型,因为大多数自定义类都不会自动处理。
所以,我猜最后的问题是:有什么方法可以将这种字面量字典转换回object吗?我想,它一定被很多人制作过很多次……
发布于 2013-10-16 14:42:19
这个问题可能有更好的答案,但由于没有人提出,我可以分享一些我自己研究的解决方案。这个问题的解决方案在很大程度上取决于需要序列化/反序列化的类的结构,但是要了解如何进行这样的解析,可以看看在Pyro4.util中实现的dict_to_class方法。
https://stackoverflow.com/questions/19371857
复制相似问题