Скажем, у меня есть 2 подмодуля внутри пакета как
|-packageA
|- moduleA
|- moduleB
. В moduleB есть метод создания динамического класса, который использует type () для создания нового класса.
def moduleB.fun():
new_cls = type("bar",(obejct,),{})
return new_cls
Созданный классвсегда имеет имя packageA.moduleB.bar
.(Вместо этого мне нужно, чтобы оно было просто bar
.)
Когда я укрупняю объект, созданный из этого динамического класса, он выводит его вместе с именем пространства имен.
def moduleA.fun2():
new_cls = moduleB.fun()
obj = new_cls("Object of new class")
dill.dump(obj, open("test.obj","wb"))
Проблема возникает, когда я нахожусь в новом сеансе Python и пытаюсь загрузить этот файл укропа.
В новом сеансе
dat = dill.load(open("test.obj","rb"))
Укропжалуется, что Can't get attribute 'bar' on <module 'packageA.moduleB'>
Я попытался установить его в global()["bar"] = new_cls
в moduleB.fun (), но это создание типа, которое кажется проблемой.Любая помощь?