Pickle动态导入的类

2024-06-17 01:29:47 发布

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

我有一堆从导入的类中创建的对象

module = imp.load_source(packageName, packagePath)

我需要腌制。只要packagePath直接在Python路径或工作目录中,就可以完美地工作。在

但一旦我把它移到别的地方,我就害怕了

^{pr2}$

我尝试添加一个__reduce__方法,该方法将类作为第一个值返回。我尝试使用dill,它被认为能够序列化完整的类,而不是对该类的简单引用(我尝试将它与__reduce__)结合使用。在

当前的工作方式是在一个负责导入包的对象中,将它们与包路径一起进行双重酸洗:

class Container(object):

    def __init__(self, packagePath, packageName, objectsDump= None):
        self.package = imp.load_source(packageName, packagePath)
        self.packagePath = packagePath
        self.packageName= packageName
        if objectsDump is not None:
            self.objects = dill.loads(objectsDump)

    def __reduce__(self):
        return (self.__class__,
               (self.packagePath, self.packageName, dill.dumps(self.objects))

我发现这个方法真的很复杂,我想知道:有没有一种更像Python的方法来实现这一点?

注意:所有这些都发生在python2.7.10,dill0.2.6中。所有要序列化的对象都是新样式的对象(继承自object)。在


Tags: 对象方法self路径reducesource序列化object