Dill / Pickle: Dump объект пользовательского класса - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь создать экземпляр объекта из пользовательского класса и при этом установить некоторые переменные класса и сбросить объект.Затем в другом файле я хочу загрузить выгруженный объект, чтобы получить переменные класса.Я опубликую небольшой пример ниже:

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 return _reverse_typemap [name]

Ждем ваших ответов!

1 Ответ

0 голосов
/ 23 февраля 2019

Я 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, которую вы используете, и вашу ОС.

...