Dill/Pickle: Dump объект пользовательского класса
Я пытаюсь создать экземпляр объекта из пользовательского класса, и при этом установить некоторые переменные класса и сбросить объект. Затем в другом файле я хочу загрузить выгруженный объект, чтобы получить переменные класса. Я опубликую небольшой пример ниже:
import dill
class RandomClass:
mean = 0
def __init__(self):
self.name = "random_name"
self.set_mean(5)
@classmethod
def set_mean(cls, value):
cls.mean = value
obj = RandomClass()
dill.dump(obj, open("test.pkl","wb"))
Затем я хочу загрузить объект и получить переменную класса, выполнив:
import dill
obj = dill.load(open("test.pkl", "rb"))
obj.mean
Однако при этом я получаю следующую ошибку:
Файл "/Users/username/Library/Caches/pypoetry/virtualenvs/projectname-py3.6/lib/python3.6/site-packages/dill/_dill.py", строка 305, в загрузке obj = pik.load() Файл "/Users/username/Library/Caches/pypoetry/virtualenvs/projectname-py3.6/lib/python3.6/site-packages/dill/_dill.py", строка 577, в _load_type возвращает _reverse_typemap[имя]
Ждем ваших ответов!
1 ответ
Я dill
автор. Я не могу воспроизвести вашу ошибку. Увидеть ниже (copy
просто dump
затем load
):
Python 3.6.6 (default, Jun 28 2018, 05:53:46)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> class RandomClass:
... mean = 0
... def __init__(self):
... self.name = "random_name"
... self.set_mean(5)
... @classmethod
... def set_mean(cls, value):
... cls.mean = value
...
>>> obj = RandomClass()
>>> obj.mean
5
>>> dill.copy(obj)
<__main__.RandomClass object at 0x10747cba8>
>>>
Если ваша ошибка не устранена, то, возможно, лучше всего заполнить заявку на dill
GitHub, и дайте версию dill
вы используете и свою ОС.