首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dill/Pickle:转储自定义类对象

Dill/Pickle:转储自定义类对象
EN

Stack Overflow用户
提问于 2019-02-21 15:37:28
回答 1查看 1.1K关注 0票数 0

我试图从自定义类实例化一个对象,同时设置一些类变量,并转储对象。然后,在另一个文件中,我希望加载转储对象,以便检索类变量。我将在下面发表一个小例子:

代码语言:javascript
复制
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"))

然后,通过执行以下操作来加载对象并检索类变量:

代码语言:javascript
复制
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() File "/Users/username/Library/Caches/pypoetry/virtualenvs/projectname-py3.6/lib/python3.6/site-packages/dill/_dill.py",第577行中,在_load_type返回_reverse_typemapname中

期待你的回答!

EN

回答 1

Stack Overflow用户

发布于 2019-02-23 20:43:43

我是dill的作者。我不能重复你的错误。参见下面(copy就是dump,然后是load):

代码语言:javascript
复制
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和操作系统的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54810837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档