我想保留从扩展了抽象基类的动态定义的类创建的对象。我试图通过腌制对象来实现此目的。我正在使用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失败