我有一个嵌套的类:
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作为属性添加到模块。酸洗应该很好。我不建议您使用此技巧。

07-24 14:27