【发布时间】:2015-02-16 13:46:04
【问题描述】:
dill 是一个伟大的工具来酸洗大多数 Python 对象,我在 IPython 中并行使用它来序列化计算。我一直在讨论的一个问题是围绕类定义进行挖掘。下面解释了我得到的错误之一。
在尝试序列化类定义时,我不断从dill 获得AssertionError。我想知道为什么其中一个有效而另一个失败:
class MyClassEmpty(object):
pass
class MyClassInit(object):
def __init__(self):
super(MyClassInit).__init__()
dill.dumps(MyClassEmpty) # returns: '\x80\x02cdill.dill\n_create_type\nq\x00(cdill.dill\n_load_type\nq\x01U\x08TypeTypeq\x02\x85q\x03Rq\x04U\x0cMyClassEmptyq\x05h\x01U\nObjectTypeq\x06\x85q\x07Rq\x08\x85q\t}q\n(U\n__module__q\x0bU\x08__main__q\x0cU\x07__doc__q\rNutq\x0eRq\x0f.'
dill.dumps(MyClassInit) # AssertionError at line 244 of MyClassEmpty (assert id(obj) not in self.memo)
我在 Python 2.7.6 上使用 dill 0.2.2。
【问题讨论】:
-
你读过例如stackoverflow.com/questions/2626636/pickling-a-class-definition?此外,您的
super调用似乎不正确 - 应该是super(MyClassInit, self).__init__()。 -
可以执行,没有抛出AssertionError。
-
感谢 jonrsharpe!问题只是缺少
, self。更正dumps()后,就像在链接的帖子中一样,按预期工作。 -
@SmCaterpillar,很有趣!你使用的是同一个 Python 和 dill 版本吗?
-
嗯,我使用了 python 2.7.9,但在 IPython Notebook 环境中。还是那不应该改变什么?!