如何解决如何对一个类进行莳萝并在以后进行修改?
我当前正在使用Python的莳萝库,并且正在使用它莳萝一个类。这是课程
class QQQ:
def __init__(self,name):
self.name = name
self.total = 0
def add_1(self,add):
self.total = 1 + add
# To test the below after loading the saved dill
# self.total = 101 + add
@property
def get_total(self):
return self.total
然后我实例化我的课程并将其莳萝
import dill
path = '/path/file'
dill.settings['recurse'] = True
from x.qqq import QQQ
qqq = QQQ(name='Test1')
qqq.add_1(100)
with open(path,'wb') as f:
dill.dump(qqq,f)
class QQQ:
def __init__(self,add):
# self.total = 1 + add
self.total = 101 + add
@property
def get_total(self):
return self.total
尽管,如果我在钝化后修改了这个QQQ类,那么我将加载我的转储文件:
import dill
path = '/path/file'
dill.settings['recurse'] = True
with open(path,'rb') as f:
old_class = dill.load(f)
old_class.add_1(100)
total = old_class.get_total
它使用的是修改后的类,而不是我之前讲过的莳萝类。
解决方法
我是dill
的作者。它忽略存储的类,因为这被确定是正确的做法。如果您重新定义了类,则有两种选择,可以使用新定义的类...,或者忽略它并使用旧的类定义。 dill
的旧版本忽略了新的类定义,但是随后认为这不是正确的默认行为。默认情况下,所有最新版本都将遵循任何重新定义的类。
如果您确实想忽略新的类定义,则必须在加载时执行,如下所述。
>>> import dill
>>> class QQQ(object):
... def __init__(self):
... self.total = 0
... def increment(self,n=1):
... self.total += n
...
>>> q = QQQ()
>>> q.increment()
>>> q.total
1
>>> dill.dump(q,open('qqq.pkl','wb'))
>>>
然后重新启动会话。除非使用ignore
标志,否则您将获得新的类定义。
>>> import dill
>>> class QQQ(object):
... def __init__(self):
... self.total = 0
... def increment(self,n=10):
... self.total += n
... def decrement(self,n=10):
... self.total -= n
...
>>> q = dill.load(open('qqq.pkl','rb'))
>>> q.total
1
>>> q.increment()
>>> q.total
11
>>> p = dill.load(open('qqq.pkl','rb'),ignore=True)
>>> p.total
1
>>> p.increment()
>>> p.total
2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。