腌制动态定义的抽象基类扩展时出错

时间:2019-05-22 23:11:56

标签: python dynamic pickle

我想保留从扩展了抽象基类的动态定义的类创建的对象。我试图通过腌制对象来实现此目的。我正在使用Python 3.6.8

该错误消息表明pickle试图查找我在abc模块中创建的类,但无法在其中找到它。我试图通过在主模块中创建类(通过在test.py中定义class_factory)来腌制,但是我得到了相同的错误消息。

objmodel.py

from abc import ABC, abstractmethod

class mtype(ABC):
    def __init__(self):
        super().__init__()

    @abstractmethod
    def set_someattrib(self, attrval):
        pass


@classmethod
def set_attrib1(cls, aval):
    cls.attrib = aval

utils.py

from objmodel import *


def class_factory(mname, aval):
    c1 = type(mname, (mtype,), {"set_someattrib": set_attrib1})
    c1.set_someattrib(aval)
    return c1

test.py

from utils import class_factory
import pickle

c1 = class_factory('C', 1)
print(c1.attrib)
m = c1()
fh = open('objtest', 'wb')
pickle.dump(m, fh)

我收到以下错误: _pickle.PicklingError:不能泡菜:abc上的属性查找C失败

0 个答案:

没有答案