我有一个嵌套的类:
WidgetType(object)类:
FloatType(object)类:
通过
类TextType(object):
通过
..和这样的对象,它引用嵌套的类类型(而不是它的实例)
类ObjectToPickle(object):
def __init __():
self.type = WidgetType.TextType
尝试序列化ObjectToPickle类的实例会导致:
有没有办法在python中腌制嵌套的类?
最佳答案
pickle模块正在尝试从该模块获取TextType类。但是由于该类是嵌套的,因此无法使用。 jasonjs的建议将起作用。
以下是pickle.py中负责错误消息的行:
try:
__import__(module)
mod = sys.modules[module]
klass = getattr(mod, name)
except (ImportError, KeyError, AttributeError):
raise PicklingError(
"Can't pickle %r: it's not found as %s.%s" %
(obj, module, name))
klass = getattr(mod, name)
当然不适用于嵌套类。为了演示发生了什么,请在腌制实例之前尝试添加以下行:import sys
setattr(sys.modules[__name__], 'TextType', WidgetType.TextType)
此代码将TextType作为属性添加到模块。酸洗应该很好。我不建议您使用此技巧。