我试图从自定义类实例化一个对象,并在此过程中设置一些类变量,并转储该对象。然后,在另一个文件中,我想加载转储的对象以检索类变量。我将在下面发布一个小例子:
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行,在load 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 [name]
期待您的回答!
我是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
版本和您的操作系统。